CodeIgniterでRESTful API開発!GET・POST・PUT・DELETEを初心者向けに徹底解説
生徒
「CodeIgniterを使って、スマホアプリや他のサイトとデータをやり取りする仕組みを作りたいんですけど、どうすればいいですか?」
先生
「それは『API(エーピーアイ)』というものを作る必要がありますね。CodeIgniterには、RESTful APIという便利な仕組みを簡単に作る機能が備わっていますよ。」
生徒
「APIって、GETとかPOSTとかいう言葉をよく聞きますが、あれは何のことですか?」
先生
「それはサーバーに対して『何をしてほしいか』を伝える命令の種類のことです。今日はその基本的な4つの命令(メソッド)の扱い方を学んでいきましょう!」
1. RESTful APIとCodeIgniterの基本
プログラミングの世界で最近よく耳にするAPI(Application Programming Interface)とは、ソフトウェア同士が会話をするための窓口のようなものです。例えば、皆さんがスマートフォンのアプリでニュースを見るとき、アプリは裏側でニュースが保存されているサーバー(親玉のコンピューター)に「最新のニュースをください」とお願いしています。このお願いを受け取る仕組みがAPIです。
その中でもRESTful(レストフル)と呼ばれる形式は、インターネットで最も普及している書き方です。PHPの人気フレームワークであるCodeIgniter(コードイグナイター)は、このAPIを作るのが非常に得意です。フレームワークとは、家を建てるときの「骨組み」のようなもので、ゼロから全部作らなくても、決まったルールに従うだけで素早く高品質なアプリが作れる道具箱のことです。
CodeIgniterでAPIを作る際、最も重要になるのが「HTTPメソッド」という考え方です。これは、郵便局で「手紙を送るのか」「荷物を受け取るのか」を伝えるように、プログラムで「データを取得するのか」「新しく保存するのか」を区別するための合言葉です。
2. GETメソッド:データを取得する「閲覧」の基本
まず最初に覚えるのがGET(ゲット)です。その名の通り「情報を手に入れる」ための命令です。Webブラウザでホームページを見る行為は、すべてこのGETメソッドで行われています。APIにおいては、データベース(情報の保管庫)に保存されているユーザー情報や記事一覧を読み出すときに使います。
CodeIgniterでは、ResourceControllerという特別な部品を使うことで、GETの命令が来たときにどの処理をするかを自動的に振り分けてくれます。初心者の皆さんは、まず「GETは見るためのもの」と覚えておきましょう。データを壊したり、書き換えたりすることはありません。
namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController;
class UserApi extends ResourceController
{
// GET: ユーザー一覧を取得する
public function index()
{
$users = [
['id' => 1, 'name' => '田中太郎'],
['id' => 2, 'name' => '山田花子']
];
// データをJSONという形式で返します
return $this->respond($users);
}
}
実行結果のイメージは以下のようになります。ブラウザやアプリがこの文字を受け取って、画面に綺麗に表示します。
[
{"id": 1, "name": "田中太郎"},
{"id": 2, "name": "山田花子"}
]
3. POSTメソッド:新しいデータを作成する「追加」
次に紹介するのがPOST(ポスト)です。郵便ポストに手紙を投函するように、サーバーに新しい情報を「送り届けて保存してもらう」ときに使います。新しい会員登録をしたり、ブログに新しい記事を投稿したりする場面がこれに当たります。
POSTでは、送るデータが目に見えない封筒の中に入って届くイメージです。URLの末尾にデータが表示されないため、パスワードなどの大切な情報を送る際にもよく使われます。CodeIgniterでは$this->request->getPost()という命令を使って、届いた封筒の中身を取り出します。プログラミング未経験の方は、「POSTは新しく仲間を増やす処理」とイメージしてみてください。
// POST: 新しいユーザーを登録する
public function create()
{
// 送られてきた「名前」を受け取る
$name = $this->request->getVar('name');
// ここでデータベースに保存する処理を行います
$data = [
'message' => $name . 'さんを新しく登録しました!'
];
return $this->respondCreated($data);
}
4. PUTメソッド:既存のデータを書き換える「更新」
3つ目はPUT(プット)です。これは、すでにデータベースにある情報を「最新の状態に書き換える」ときに使います。プロフィールの変更や、記事のタイトルを修正する場合などが該当します。
「POSTと何が違うの?」と疑問に思うかもしれませんが、POSTは「新しく作る」、PUTは「今あるものを置き換える」という違いがあります。例えば、出席名簿に新しい名前を書き加えるのがPOST、間違っていた名前を消しゴムで消して書き直すのがPUTです。CodeIgniterのAPI機能では、更新対象の番号(ID)を指定して、その中身を上書きする処理を書きます。
// PUT: 既存のユーザー情報を更新する
public function update($id = null)
{
// $id番のデータを更新するための新しいデータを受け取る
$newData = $this->request->getRawInput();
$response = [
'status' => '成功',
'message' => 'ユーザーID ' . $id . ' の情報を更新しました。'
];
return $this->respond($response);
}
5. DELETEメソッド:不要なデータを削除する「消去」
最後はDELETE(デリート)です。名前の通り、データベースから特定の情報を「削除」するための命令です。退会処理や、間違えて投稿した記事を消すときに使われます。DELETEを使うときは、どのデータを消すのかをはっきりさせるために、必ずID(背番号のようなもの)を指定します。
削除はやり直しが効かない重要な操作なので、実際の開発では「本当に消していいですか?」という確認画面を作ることが多いですが、APIの世界ではこの命令が届いた瞬間にサーバーが削除を実行します。シンプルですが、非常に強力な命令です。
// DELETE: ユーザーを削除する
public function delete($id = null)
{
// データベースから$id番のデータを削除する処理をここに書く
return $this->respondDeleted(['message' => 'ユーザーID ' . $id . ' を削除しました。']);
}
6. JSONとは?APIが話す共通言語の解説
先ほどのコードの中にJSON(ジェイソン)という言葉が出てきました。これは「JavaScript Object Notation」の略で、コンピューター同士がデータをやり取りする際に使う「共通言語」のようなものです。人間にとっても読みやすく、プログラムにとっても扱いやすいという特徴があります。
CodeIgniterでAPIを作ると、最終的な結果はHTML(Webページの見た目を作る言語)ではなく、このJSON形式で出力されます。なぜなら、APIは人間が直接読むためではなく、スマホアプリや他のシステムが読み取って利用するためにあるからです。例えば「名前:田中、年齢:20」という情報を{"name": "田中", "age": 20}という形で表現します。これさえ覚えれば、どんなプログラミング言語を使っているシステムとも通信ができるようになるのです。
7. ルーティング:命令を正しい部屋へ案内する仕組み
最後に、ルーティングについて説明します。これは、送られてきたGETやPOSTなどの命令を、プログラムのどの部分(部屋)に案内するかを決める「案内係」の役割をします。CodeIgniterでは Routes.php というファイルに設定を書きます。
例えば「ユーザー情報を見たい」というGETの命令が来たら、先ほど作った UserApi クラスの index という処理に案内するように設定します。これがあるおかげで、URLを叩くだけで正しいプログラムが動き出します。初心者の方は「URLとプログラムを紐付ける地図」だと考えてください。この地図をしっかり描くことが、使いやすいAPIを作る第一歩となります。
// Routes.phpの設定例
// これ一行で、GET, POST, PUT, DELETEの案内が自動設定されます!
$routes->resource('userapi');
この一行を書くだけで、CodeIgniterは「/userapi」というURLに対して、各メソッドを自動的に適切なメソッドへ繋いでくれます。非常に便利な機能ですね。