-
Notifications
You must be signed in to change notification settings - Fork 12
クライアントヘルパー
xanagi edited this page May 25, 2011
·
5 revisions
アプリケーションが動作している外部サーバから、APIサーバへリクエストを送信して、データを取得・操作することができます。
このときに役に立つのが、クライアントヘルパーです。
クライアントヘルパーを使うと、次の処理を簡単に行うことができます。
- APIリクエストURLの構築
- Authorizationヘッダの計算
クライアントヘルパーは、リクエストのOAuth検証を実行していれば、リクエストオブジェクトから取得することができます。
# People APIでユーザ情報を取得するためのクライアントヘルパー
client_helper = request.client_helper('people', '@me', '@self')
バッチタイプのAPIリクエストを行う場合は、OAuthヘルパーのインスタンスを作成して、クライアントヘルパーを取得します.
# バッチタイプのリクエストを送信するためのクライアントヘルパー
guid = ....
oauth_helper = OpensocialWap::OAuth::Helpers::BasicHelper.new
client_helper = oauth_helper.client_helper('people', guid, '@self')
以下のようにして、APIリクエスト先のURLを取得することができます。
url = client_helper.url # URLを文字列として取得
uri = client_helper.uri # URIオブジェクトとして取得
Net::HTTPRequestや、Typhoeus::Requestといったリクエストオブジェクトについて、Authorizationヘッダを計算することができます。
# Net::HTTPRequestを使う場合の例
api_request = Net::HTTP::Get.new(client_helper.uri.request_uri)
authorization_header = client_helper.authorization_header(api_request)
# => "OAuth oauth_consumer_key=...
詳しい使い方については下のサンプルをご覧ください。
# GET
client_helper = request.client_helper('people', '@me', '@self')
uri = client_helper.uri
api_request = Net::HTTP::Get.new(uri.request_uri)
api_request['Authorization'] = client_helper.authorization_header(api_request) # Authorizationヘッダを指定
Net::HTTP::start(uri.host) do |http|
api_response = http.request(api_request)
end
# POST
post_data = '{"class": "Dark Knight"}'
client_helper = request.client_helper('appdata', '@me', '@self', '@app')
uri = client_helper.uri
api_request = Net::HTTP::Post.new(uri.request_uri)
api_request.body = post_data.to_json
api_request['Content-Type'] = 'application/json'
api_request['Authorization'] = client_helper.authorization_header(api_request) # Authorizationヘッダを指定
Net::HTTP::start(uri.host) do |http|
api_response = http.request(api_request)
end
oauth_helper = OpensocialWap::OAuth::Helpers::BasicHelper.new
client_helper = oauth_helper.client_helper('people', guid, '@self')
uri = client_helper.uri
api_request = Net::HTTP::Get.new(uri.request_uri)
api_request['Authorization'] = client_helper.authorization_header(api_request) # Authorizationヘッダを指定
Net::HTTP::start(uri.host) do |http|
api_response = http.request(api_request)
end
# GET
client_helper = request.client_helper('people', '@me', '@self')
uri = client_helper.uri
api_request = Typhoeus::Request.new(uri.to_s)
api_request.headers['Authorization'] = client_helper.authorization_header(api_request) # Authorizationヘッダを指定
hydra = Typhoeus::Hydra.new()
hydra.queue(api_request)
hydra.run
api_response = api_request.response
# POST
post_data = '{"class": "Dark Knight"}'
client_helper = request.client_helper('appdata', '@me', '@self', '@app')
uri = client_helper.uri
headers = { 'Content-Type' => 'application/json' }
api_request = Typhoeus::Request.new(uri.to_s, :body => post_data, :method => :post, :headers => headers)
api_request.headers['Authorization'] = client_helper.authorization_header(api_request) # Authorizationヘッダを指定
hydra = Typhoeus::Hydra.new()
hydra.queue(api_request)
hydra.run
api_response = api_request.response
oauth_helper = OpensocialWap::OAuth::Helpers::BasicHelper.new
client_helper = oauth_helper.client_helper('people', guid, '@self')
api_request = Typhoeus::Request.new(uri.to_s, :body => post_data, :method => :post, :headers => headers)
api_request.headers['Authorization'] = client_helper.authorization_header(api_request) # Authorizationヘッダを指定
hydra = Typhoeus::Hydra.new()
hydra.queue(api_request)
hydra.run
api_response = api_request.response
問題が発生する場合、以下のポイントをチェックしてください.
- (リクエストタイプの場合) OAuthの検証は成功しているか.
- request.opensocial_oauth_verified? でチェックすることができます.
- リクエストURLは正しいか.
- client_helper.uri でチェックすることができます.
- APIへのリクエストの認証でエラーが発生していないか.
- OpenSocialコンテナがによっては、APIレスポンスの WWW-Authenticate ヘッダを調べることでチェックできる場合があります。