CodeIgniterに入門した。CodeIgniter4の公式Tutorialをやった後、REST APIの実装を試みた。調べてみると、CodeIgniteでREST APIを実装するなら、Rest_Controllerらしい。composerでインストールしてみたが、動かず。
結論、RestControllerはCodeIgntier3用。CodeIgniter4はサポートしていない。
CodeIgniter4にはResourceControllerなるREST API用のControllerが標準で用意されているので、そっちを使うべしということだと思われる。
詳しい説明を書いてくださっているサイトを発見。
参考にしたサイト
- CodeIgniter4の公式Tutorial
- CodeIgniter RestServer
- CodeIgniter4の公式マニュアル RESTful Resource Handling
- CodeIgniter4でREST APIを作成する
CodeIgniter3 + Rest_Controllerのメモ
インストール方法
CodeIgntier3でRest_Controllerを使ったREST API実装を試す場合、下記の手順が最短。
application/controllers/Example.phpにREST APIのサンプル実装コードがインストールされるので、このコードをベースに機能を追加してみるのが良い。
$ composer create-project kenjis/codeigniter-composer-installer codeigniter
$ cd codeigniter
$ php bin/install.php restserver 2.7.2
$ ./bin/server.sh
$ curl http://localhost:8000/api/example/users
REST_Controllerがしてくれること
REST_Controllerを使うと、route.phpにHTTP Method x URLの組み合わせ分のルーティングを書かなくてもよくなる。ルールに従った名前でメソッドを用意すれば、自動的にルーティングしてくれる。
例えば、Api.phpというファイルにApiクラスを実装。Apiクラスにnews_post()メソッドを実装しておく。すると、POST /api/newsでアクセスされた時にはそのメソッドが実行されるようになる。news_get()メソッドを用意しておくと、GET /api/newsおよび、GET /api/news/id/{id}で実行されるようになる。news_get()メソッドには前者用に全てのレコードを応答する処理を、後者用に指定されたidのレコードを応答する処理を実装しておく。
リソースのURLとして、/api/news/id/{id}ではなく、/api/news/id/{id}を使いたい場合の方が多いかもしれない。そのときは、route.phpにルールを追加しておく。
$route['api/news/(:newsid)'] = 'api/users/$1';