Lumen で REST API を構築する

私は最近、友人たちと取り組んだミニ プロジェクトで、Laravel を使用して API を開発しました。 Lumen は Laravel よりもはるかに軽量で高速なフレームワークなので、別の API を代わりに構築することにしました。 Lumen は、Eloquent、キャッシュ、ルーティング、ミドルウェア、およびサービス コンテナなど、Laravel から多くのおなじみの概念を利用します。 Lumen の主な利点の 1 つはその速度で、その結果、このフレームワークは高速なマイクロサービスまたは API を構築するために設計されています。

このチュートリアルは Lumen についてですが、Laravel の仕組みについて簡単に理解していれば、フォローする必要があるのはそれだけです。 このチュートリアルのために、composer経由でそうすることにします。 Lumenをセットアップする他の方法は、こちらで確認できます。
ターミナルから、以下を実行します。
composer create-project — prefer-dist laravel/lumen lumen_api
これにより、Lumen とその依存関係がすべて lumen_api ディレクトリにインストールされます。 次に、root ディレクトリにある .env.example ファイルの名前を .env

Lumen の 5.4 のデフォルトの cache ドライバは memcached, ですが、このチュートリアルでは必要ないでしょう。 ただし、arraydatabaseredisのいずれかがサポートされています。 .env ファイルを編集し、デフォルトの CACHE_DRIVERQUEUE_DRIVER を以下の値に置き換えます:

CACHE_DRIVER=array
QUEUE_DRIVER=database

ローカルにプロジェクトを提供するには、以下のコマンドを実行して PHP の組み込みサーバーを使用します:
php -S localhost:8000 -t public

ブラウザで localhost:8000にアクセスすると、次のページが表示されるでしょう。

What we’re built

We’re building a simple REST API that handle create, read, update and delete tasks for a product resourceproduct resource

…となります。 endpoints

  • GET /products – すべての製品リソースを取得
  • POST /products- 新しい製品リソースを作成
  • GET /product/{id} – id による製品リソースを取得
  • PUT /product/{id} – id による製品リソースを更新
  • DELETE /product/{id}- 製品リソースを更新する id

Database and Migrations
Migration ファイルを作成しましょう。 次のコマンドを実行します。
php artisan make:migration create_products_table

これにより、database/migrations ディレクトリに新しいマイグレーション ファイルが作成されます。 Our product resource は次の属性、namepricedescription を持ちます。

新しく作成したマイグレーション ファイルに次のコードを追加します。

database 設定を使用して .env を編集し、次のコマンドを実行してマイグレーションを実行します。
php artisan migrate

製品モデルの作成
Laravelのartisanコマンドでmodelscontrollersを作成することに慣れているかもしれませんが、残念ながらLumenはこれらのコマンドをサポートしていません。 Lumen で利用可能な artisan コマンドのリストを見るには、以下を実行してください:
php artisan

app ディレクトリに移動して、Product.php

という新しい model を作成する

Laravel とは異なり、Lumen では Eloquent と Facades が初期状態でロードされていません。 これらを使えるようにするには、app\bootstrap.php
$app->withFacades();

$app->withEloquent();

Controller Methods

それでは、controllerを作成しましょう。 app\Http\Controller ディレクトリに移動し、ProductController.php ファイルを作成します。

  • index メソッドは利用可能なすべての製品を JSON 応答として返します。
  • create メソッドは新しい product を作り、新しく作った productJSON 応答として返します。
  • show メソッドはその id で一つの製品リソースを返します。
  • update メソッドは、同様にその id によって単一の製品リソースを更新します。
  • delete メソッドは、その id によって製品リソースを削除して success メッセージを返します。

Routes

ついに routes を追加する時が来ました。 routes フォルダ内の web.php ファイルを開き、次のコードを追加します:

routes をグループ化して、prefix api/v1 を追加します。 グループ化されたルートの共通のパラメーターを指定するために、Prefix を使用します。 まず、seedを作成することから始めましょう。 実行:
php artisan make:seed ProductsTableSeeder
これは、database/seeds ディレクトリに ProductsTableSeeder.php ファイルを作成します。 このファイルを次のコードで編集します:

次に、database\seedsディレクトリのDatabaseSeeder.phpファイルを次のコードで編集します:
LaravelのモデルファクトリーとFakerライブラリを使用して、サンプルデータを生成していきます。 database\factories ディレクトリに移動し、ModelFactory.php ファイルに次のコードを追加します。

次に、実行します:
php artisan db:seed

これは、databaseにダミーデータを作成します。

Testing our API

APIのテストにPostmanを使っていきます。 Postman を始めるにあたって、詳しくはこちら

を参照してください。

コメントを残す

メールアドレスが公開されることはありません。