WebAPIの使い方(PUTリクエスト)

PUTとは

PUTとは、「リソース(情報)を更新・作成する」ためのHTTPメソッドです。POSTと似ていますが、「べき等(何度リクエストしても結果が同じ)」という性質があります。POSTでリソースを新規作成し、PUTで更新するWeb APIが典型的です。

Yahoo!デベロッパーネットワークで提供するWeb APIには、PUTによる更新をサポートしているものがあります。

実際は、特定のユーザーに関する情報を更新するケースがほとんどですので、OAuthを使うことになるでしょう。



PUTによる通信例を以下に示します(URLはダミーですので実際にリクエストしても何も起こりません)。

PUT /v1/sample?id=123 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 21

{"name":"yahoo taro"}

Content-TypeやContent-Lengthが正しく指定されていないと、うまくリクエストが認識できません。

HTTP/1.1 200 OK
Date: Tue, 07 Feb 2012 00:00:00 GMT
Vary: Accept-Encoding
Content-Type: application/json
Cache-Control: private
Connection: close
Transfer-Encoding: chunked

{"status":"ok"}

リクエストの構造はPOSTと同じです。




PHP + pecl/OAuth によるサンプル

※こちらのサンプルはOAuth1.0を利用するサンプルです。
OAuth1.0のConsumer Keyは現在新規発行を停止させていただいております。


OAuth1.0では、まず承認を得てAccess Token、Access Token Secretを取得する必要があります。 詳細はOAuthのフローをご覧ください。

ここではAccess TokenおよびAccess Token Secretが取得できたものとして、これらを使ってPUTリクエストを行うサンプルを以下に示します。

PHPとpecl/OAuthを利用して、Social APIのユーザーのひとことを更新してみます。

<?php
/**
 * PUTでWeb APIを使う例(Access Token取得・更新省略)
 *
 */
$consumerKey = 'YOUR_CONSUMERKEY';
$consumerSecret = 'YOUR_SECRET';
// Access TokenはOAuthの認可フローを経て取得します。
// 取得のコードは省略します。
$accessToken = 'USER_ACCESS_TOKEN';
$accessSecret = 'USER_ACCESS_SECRET';
 
//GUIDも認可フローの中で取得できます。
$guid = 'GUID';
 
// リクエストするAPIのURLを組み立て
$api = "http://social.yahooapis.jp/v1/user/$guid/profile/status";
 
// リクエストボディーの組み立て
$requestBody = '<status><message>'
             . htmlspecialchars('テスト投稿 via WebAPI')
             . '</message></status>';
 
$oauth = new OAuth(
  $consumerKey,
  $consumerSecret,
  OAUTH_SIG_METHOD_HMACSHA1,
  OAUTH_AUTH_TYPE_AUTHORIZATION
);
 
$oauth->setToken($accessToken, $accessSecret);
$oauth->fetch(
  $api,
  $requestBody,
  OAUTH_HTTP_METHOD_PUT,
  array('Content-Type'=>'application/xml')
);
 
$response = $oauth->getLastResponse();
echo $response;