Laravel でサクッとAPI サーバーを構築する
概要
API Platform が Laravel でも正式に使えるようになったようです。
いつか試してみたいなと思っていたところ、
Advent Calendar を書く機会を得たので、話のネタとして試してみました。
💡 API Platform とは...
Symfony をベースとした Web API フレームワークです。
REST API や GraphQL API を瞬時に提供できます。
API サーバーを構築する
検証時のバージョン
PHP:8.3
Laravel:11.3
以下のサイトを参考にしながら構築します。
⚠️ Laravel は導入済みの状態とします。
1. API Platform のインストール
composer require api-platform/laravel
2. 設定ファイルの作成とアセット関連の公開
Laravel プロジェクトに API Platform をセットアップするコマンドになります。
php artisan api-platform:install
3. モデルクラスの作成
ここでは公式の通り、Book(本)のモデルクラスを定義します。
php artisan make:model Book
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
protected $fillable = [
'isbn',
'title',
'description',
'author',
'publication_date',
];
protected $casts = [
'publication_date' => 'date',
];
}
4. テーブルの作成
マイグレーションファイルを作成します。
php artisan make:migration create_books_table
作成されたマイグレーションファイルを編集します。
public function up(): void
{
Schema::create('books', function (Blueprint $table) {
$table->id();
$table->string('isbn')->nullable();
$table->string('title');
$table->text('description');
$table->string('author');
$table->date('publication_date')->nullable();
$table->timestamps();
});
}
テーブルを作成します。
php artisan migrate
5. モデルの公開
クラスに #[ApiResource]
属性でマークします。
この属性をつけると、API リソースとして公開されます。
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
+ use ApiPlatform\Metadata\ApiResource;
+ #[ApiResource]
class Book extends Model
{...省略}
API サーバーを起動して検証してみる
1. ローカルのサーバーを起動する
php artisan serve
2. 公開されている API のエンドポイントを確認する
http://127.0.0.1:8000/api/
にアクセスすると、公開されている API のエンドポイントが一覧表示されます。
3. 動作確認する
curl コマンド等で 期待するレスポンスが返却されるか確認してください。
例)GETメソッド
以下は 事前に books テーブルへ 1 レコード登録しています。
リクエストの実行
curl -X 'GET' \
'http://localhost:8000/api/books?page=1' \
-H 'accept: application/json'
レスポンス結果
[
{
"id": 1,
"isbn": "11-22-33",
"title": "testTitle",
"description": "testDescription",
"author": "testAuthor",
"publicationDate": "2024-11-22T00:00:00+00:00",
"createdAt": "2024-11-22T00:00:00+00:00",
"updatedAt": "2024-11-22T00:00:00+00:00"
}
]
覚えておきたい設定
ここでは、api-platform.php
の設定について説明します。
API 公開するリソースを変更する
デフォルトでは、app/Models
のパッケージ内が対象になるので、必要に応じて変更してください。
複数ディレクトリの設定も可能です。
// 例
'resources' => [
- app_path('Models'),
+ app_path('src'),
],
レスポンスのフォーマットを変更する
以下の設定では、JSON-LD(構造化データ)をレスポンスで扱うことはあまりないと思うので、JSON に変更してます。
'formats' => [
- 'jsonld' => ['application/ld+json'],
+ 'json' => ['application/json'],
],
まとめ
API サーバーの構築 ~ 動作確認まで 5 分で実現できました! 公式を見ながらですが、こんな簡単にできるとは...
外部 API について業務で触れる機会が増えたので、とてもタイムリーな話題になりました。管理画面も直感的で見やすく扱いやすいので、どこかで重宝するかもしれません。
弊社では他にも面白い記事をたくさん投稿しております。ぜひ見ていってください!
私たち BABY JOB は、子育てを取り巻く社会のあり方を変え、「すべての人が子育てを楽しいと思える社会」の実現を目指すスタートアップ企業です。圧倒的なぬくもりと当事者意識をもって、こどもと向き合う時間、そして心のゆとりが生まれるサービスを創出します。baby-job.co.jp/
Discussion