An Introduction to HTTP
これまで iOS 上の UI 構築について取り扱ってきました。しかしできることならサーバとデータのやりとりをするインタフェースにほとんどの時間を費やしたいことでしょう。これを行うために Apple が提供する方法は NSURLConnection
を使うことです。これはとてもパワフルですが、HTTP リクエストを送信するためには冗長なクラスです。代わりに、BubbleWrap
と呼ばれる最新の RubyMotion ライブラリを使う予定です。
BubbleWrap It Up
すでに述べたように、BubbleWrap は iOS SDK 用の Ruby ラッパーのコレクションです。多くの Apple の API は、コールバックが設定されたオブジェクト上の決められたメソッドを呼び出すシステムを使用しています。したがって、BubbleWrap のラッパーの多くはこれらのコールバックメソッドを lambda
と block
で動くようにしているだけです。例として BubbleWrap::HTTP
ラッパーを取り上げる予定です。
Rakefile
に require
を追加することを覚えておいてください。
$:.unshift("/Library/RubyMotion/lib")
require 'motion/project'
require 'rubygems'
require 'bubble-wrap'
...
BubbleWrap::HTTP
ライブラリでは、HTTP リクエストメソッドとしてそれぞれ HTTP.get
, HTTP.post
, HTTP.put
などの機能を使えます。それぞれのメソッドは引数として URL 文字列とオプションのハッシュ、リクエストが終了したときのコールバックブロックを取ります。以下は、いくつか短いそれらのサンプルです。
BubbleWrap::HTTP.get("http://google.com") do |response|
p response.body.to_str
end
# BW is alias for BubbleWrap
BW::HTTP.get("http://www.bing.com/search", payload: {q: "some query"}) do |response|
# sends request to http://www.bing.com/search?q=some+query
end
BW::HTTP.post("https://graph.facebook.com/123123123/comments", payload: {message: "This is a comment"}) do |response|
# sends request to https://graph.facebook.com/123123123/comments
# with body params `message=This is a comment`
end
かなり良さそうに見えるでしょう?私たちが使った API は単に GET と POST を使用しただけですが、より多くの情報 (ファイル、ヘッダー、HTTP 認証) をリクエストに追加することもできます。(HTTP documentation で詳細をチェックできます)
ちょっと待って、私たちは実際に何を作るんでしょう?