PHPでのREST API
APIを、API開発者とそのユーザーの双方にとって共通して便利なものにするために標準化された、特別なアプローチが存在します。
そのようなアプローチの一つがREST APIです。その基本にある考え方は、CRUD操作にはHTTPプロトコルの様々なメソッドを使用する必要があるというものです。
データの取得にはGETメソッド、データの作成にはPOSTメソッド、データの変更にはPUTメソッド、データの削除にはDELETEメソッドを使用します。
例として、ユーザーを操作するあるAPIを考えてみましょう。さまざまなアクションに対するURLがどのように見えるかを見てみます。
全てのユーザーを取得:
GET http://api.loc/users/
idによる単一ユーザーの取得:
GET http://api.loc/user/1/
ユーザーの作成:
POST http://api.loc/user/
idによるユーザーの変更:
PUT http://api.loc/user/1/
idによるユーザーの削除:
DELETE http://api.loc/user/1/
PHPでREST APIがどのように実装されるかを見てみましょう。ここには少し問題があります。実は、PHPもCURLもGETメソッドとPOSTメソッドしかサポートしていないのです:
<?php
$method = $_SERVER['REQUEST_METHOD'];
var_dump($method); // GETとPOSTのみ
?>
そのため、REST APIを実装するには工夫が必要です。その要点は、実際にはデータはGETとPOSTメソッドでのみ送信されますが、カスタムHTTPヘッダーを使って他のメソッドの動作をシミュレートするというものです。
例えば、それをHTTP-X-HTTP-METHODと名付けましょう。
そうすれば、次のようにしてこのヘッダーの内容を取得できるようになります:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>
これでAPIの実装を書くことができます:
<?php
$method = $_SERVER['HTTP-X-HTTP-METHOD'];
switch ($method) {
case 'GET':
// ...
break;
case 'POST':
// ...
break;
case 'PUT':
// ...
break;
case 'DELETE':
// ...
break;
}
?>
オンラインショップの商品用REST APIを実装してください。
CURLライブラリを使って、実装したAPIの動作を確認してください。