PHPでのREST API

APIを、API開発者とそのユーザーの双方にとって共通して便利なものにするために標準化された、特別なアプローチが存在します。

そのようなアプローチの一つがREST APIです。その基本にある考え方は、CRUD操作にはHTTPプロトコルの様々なメソッドを使用する必要があるというものです。

データの取得にはGETメソッド、データの作成にはPOSTメソッド、データの変更にはPUTメソッド、データの削除にはDELETEメソッドを使用します。

例として、ユーザーを操作するあるAPIを考えてみましょう。さまざまなアクションに対するURLがどのように見えるかを見てみます。

全てのユーザーを取得:

urlGET http://api.loc/users/

idによる単一ユーザーの取得:

urlGET http://api.loc/user/1/

ユーザーの作成:

urlPOST http://api.loc/user/

idによるユーザーの変更:

urlPUT http://api.loc/user/1/

idによるユーザーの削除:

urlDELETE http://api.loc/user/1/

PHPでREST APIがどのように実装されるかを見てみましょう。ここには少し問題があります。実は、PHPもCURLもGETメソッドとPOSTメソッドしかサポートしていないのです:

api.loc/index.php<?php
  $method = $_SERVER['REQUEST_METHOD'];
  var_dump($method); // GETとPOSTのみ
?>

そのため、REST APIを実装するには工夫が必要です。その要点は、実際にはデータはGETとPOSTメソッドでのみ送信されますが、カスタムHTTPヘッダーを使って他のメソッドの動作をシミュレートするというものです。 例えば、それをHTTP-X-HTTP-METHODと名付けましょう。

そうすれば、次のようにしてこのヘッダーの内容を取得できるようになります:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
?>

これでAPIの実装を書くことができます:

api.loc/index.php<?php
  $method = $_SERVER['HTTP-X-HTTP-METHOD'];
  
  switch ($method)  {
    case 'GET':
      // ...
    break;
    case 'POST':
      // ...
    break;
    case 'PUT':
      // ...
    break;
    case 'DELETE':
      // ...
    break;
  }
?>
Задание 1

オンラインショップの商品用REST APIを実装してください。

Задание 2

CURLライブラリを使って、実装したAPIの動作を確認してください。