CodeIgniterでRESTful API開発!API専用コントローラの作り方入門
生徒
「CodeIgniter(コードイグナイター)を使って、Webサービスを作るための『API』というものを作ってみたいのですが、どうすればいいですか?」
先生
「いいところに目をつけましたね!CodeIgniter 4には、API開発をとても簡単にする『API専用コントローラ(ResourceController)』という仕組みがあるんですよ。」
生徒
「普通の画面を表示するページとは作り方が違うんですか?初心者でもAPIを作れるようになりますか?」
先生
「はい、大丈夫です。ルールさえ覚えてしまえば、驚くほど短いコードで作成できます。まずはAPIの基本から一緒に見ていきましょう!」
1. RESTful APIとCodeIgniterの基本を知ろう
プログラミングを始めたばかりの方にとって、API(エーピーアイ)という言葉は難しく感じるかもしれません。APIとは、簡単に言うと「アプリとアプリが情報をやり取りするための窓口」のことです。例えば、スマートフォンのアプリが、インターネット上のサーバーから最新のニュース情報を取得するとき、この「窓口」を通じてデータを受け取っています。
そして、現代のWeb開発で主流となっているのがRESTful API(レストフル・エーピーアイ)です。これは、データの取得なら「GET」、データの作成なら「POST」、データの更新なら「PUT」、データの削除なら「DELETE」というように、HTTPメソッドと呼ばれる「通信の種類」を使って操作を区別するルールのことです。
PHPの人気フレームワークであるCodeIgniter 4には、このRESTfulなルールを簡単に実装するための専用の仕組みが用意されています。これを使えば、面倒な設定を抜きにして、スマートにAPIを構築することができるのです。パソコンを初めて触るような感覚でも、一つひとつの手順を追えば必ず理解できますので安心してください。
2. API専用コントローラ「ResourceController」とは?
CodeIgniterでAPIを作る際、最も重要な役割を果たすのがコントローラです。コントローラとは、ユーザーからのリクエスト(「データをちょうだい!」というお願い)を受け取り、それを処理して結果を返す「司令塔」のような存在です。
通常のWebサイトでは、HTMLという言語を使って「画面」を表示するためのコントローラを使いますが、APIではデータ(主にJSONという形式)だけを返す必要があります。そこで役立つのがResourceController(リソースコントローラ)です。
これを使う最大のメリットは、あらかじめ「データの表示」「作成」「編集」「削除」といった必要な機能の「型」が用意されていることです。自分ですべてをゼロから書かなくても、枠組みができあがっているので、中身を埋めるだけでAPIが完成します。料理で例えるなら、すでに切ってある野菜とセットになった「料理キット」を使うようなものです。
3. 最初のAPIコントローラを作成してみよう
それでは、実際にプログラムを書いてみましょう。まずは、商品の情報を扱う「Product」という名前のAPIコントローラを作成します。CodeIgniterの規約(プログラミング上の決まりごと)に従って、app/Controllers というフォルダの中にファイルを作成します。
以下のコードは、最もシンプルなAPIコントローラの形です。BaseController ではなく、ResourceController を継承(機能を借りること)するのがポイントです。
namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController;
class Product extends ResourceController
{
// データを表示するための形式を「JSON」に指定します
protected $format = 'json';
public function index()
{
$data = [
'message' => '商品一覧を取得しました',
'products' => [
['id' => 1, 'name' => 'リンゴ', 'price' => 100],
['id' => 2, 'name' => 'バナナ', 'price' => 150]
]
];
// respondメソッドを使うと、自動的に適切な形式で返信してくれます
return $this->respond($data);
}
}
このコードの中で出てくる namespace や use は、「このファイルはどこにある誰なのか」を宣言するための住所のようなものです。最初は「おまじない」だと思って書いておけば大丈夫です。index() という関数は、一覧データを見たいときに呼ばれる特別な場所です。
4. ルーティングの設定をしてAPIに道を作ろう
コントローラを作っただけでは、外の世界からそのコントローラを見つけることができません。そこで、ルーティングという設定を行います。これは、特定のURLにアクセスしたときに、どのコントローラを動かすかを決める「案内図」の役割をします。
CodeIgniterでは、app/Config/Routes.php というファイルで設定を行います。APIの場合は、一つひとつ書くのではなく、resource という便利な一行で済ませることができます。パソコンの操作に慣れていなくても、ファイルを開いて追記するだけなので簡単です。
// app/Config/Routes.php の中に追記します
$routes->resource('product');
たったこれだけで、http://あなたのドメイン/product にアクセスすると、先ほど作った Product コントローラの index メソッドが自動的に動き出すようになります。これがフレームワークの便利な魔法です。手動で複雑な設定をする必要はありません。
5. 新しいデータを登録する「create」メソッドの実装
次に、APIを使って新しい情報を登録する仕組みを作ってみましょう。RESTful APIでは、新しいものを作ることを「create(クリエイト)」と呼び、通常は POST(ポスト)という通信方法を使います。郵便ポストに手紙を投函するようなイメージですね。
ユーザーから送られてきたデータをどう受け取って、どう返事を返すか。その流れを次のコードで確認してみましょう。ここでは「お試し」として、送られたデータをそのままオウム返しするプログラムを書いてみます。
public function create()
{
// 送られてきたデータを受け取ります
$name = $this->request->getVar('name');
$price = $this->request->getVar('price');
if (!$name || !$price) {
// データが足りない場合はエラーを返します
return $this->fail('名前と価格を入力してください', 400);
}
$response = [
'status' => 201,
'message' => '商品が新しく登録されました!',
'data' => [
'name' => $name,
'price' => $price
]
];
// respondCreatedは「新しく作ったよ!」という専用の返信です
return $this->respondCreated($response);
}
この fail という命令は、何か問題があったときに「ダメだったよ」と伝えるためのものです。数字の 400 は「リクエストの内容が間違っているよ」という意味の世界共通の番号です。これを HTTPステータスコード と呼び、プログラミングの世界ではとても重要です。
6. データを更新・削除するための仕組み
APIでは、一度登録したデータを書き換えたり、不要になったデータを消したりすることも必要です。これらは update(更新)や delete(削除)という名前の関数で行います。
更新の場合は「どのデータを変えるか」を指定するためにIDが必要になります。例えば、IDが「1」の商品の名前を変えたい、といった具合です。削除も同様ですね。以下の例では、削除の処理が成功したときにどんな返事をするかを見てみましょう。
public function delete($id = null)
{
// 本来はここでデータベースから削除する処理を書きますが、
// 今回は「消したよ」というメッセージだけ返します。
if ($id === null) {
return $this->failNotFound('消したい商品のIDが見つかりません');
}
return $this->respondDeleted([
'id' => $id,
'status' => 'success',
'message' => '商品は正常に削除されました'
]);
}
$id = null という書き方は、もしIDが送られてこなかったら「空っぽ(null)」にしておくという設定です。プログラミング未経験の方は「中身がない状態」を null(ヌル)と呼ぶことを覚えておきましょう。
7. JSON形式の返信を確認する方法
APIを作成したら、正しく動いているか確認する必要があります。しかし、APIは「データ」を返すものなので、普通のブラウザ(ChromeやEdgeなど)で見ても、真っ白な画面に文字が並んでいるだけで分かりにくいことがあります。
実行結果は、以下のようなJSON(ジェイソン)という形式で表示されます。これは人間にも読みやすく、機械にとっても扱いやすいデータの書き方です。中括弧 { } や角括弧 [ ] を使ってデータを構造化しています。
{
"status": 200,
"message": "商品一覧を取得しました",
"products": [
{
"id": 1,
"name": "リンゴ",
"price": 100
},
{
"id": 2,
"name": "バナナ",
"price": 150
}
]
}
このように整理されたデータが返ってくれば、API開発は大成功です。このデータを元に、スマートフォンのアプリ側で「リンゴ 100円」ときれいに表示させるわけですね。APIは裏方として、常にこのようなデータの受け渡しを頑張ってくれているのです。
8. エラーが起きた時の対処法とポイント
プログラミングをしていると、必ず「エラー」に遭遇します。初心者のうちはエラー画面が出るとびっくりしてしまいますが、実はエラーは「ここが間違っているよ!」と教えてくれる親切なガイドです。API開発では、特に以下の点に注意しましょう。
- URLが正しいか: 綴りが一文字でも違うと、案内図(ルーティング)が機能しません。
- セミコロンの忘れ: PHPでは文の最後に必ず
;(セミコロン)が必要です。 - データの形式: 相手が「名前」を求めているのに「数字」を送っていないか確認しましょう。
CodeIgniterには、エラーの内容を詳しく表示してくれる機能もあります。開発中は .env という設定ファイルで CI_ENVIRONMENT = development と設定しておくと、どこで間違えたかが画面に詳しく表示されるようになります。これを活用して、少しずつ問題を解決していくのが上達の近道です。パソコンのキーボードを打つのがゆっくりでも、一つひとつ丁寧に入力していけば、必ず動くプログラムが作れます。
9. まとめ:API開発は「約束事」の積み重ね
ここまで、CodeIgniter 4でAPI専用コントローラを作る方法を解説してきました。難しそうに見えたかもしれませんが、結局のところ、API開発は「決められたルール(REST)」に従って、特定の場所にプログラムを書いていくだけの作業です。
ResourceControllerを使うことで、私たちは「データのやり取り」という本質的な部分に集中できるようになります。この基礎をマスターすれば、次はデータベースから実際の在庫情報を読み取ったり、ユーザーの注文を受け付けたりといった、より本格的なWebサービスへのステップアップが見えてきます。一歩ずつ、楽しみながら開発を続けていきましょう。