Laravel + Vue.js + DDDのすゝめ – PostmanでAPIを実行する

Laravel + Vue.js + DDDのすゝめ – PostmanでAPIを実行する

REST APIのバックエンドを実行するためにPostmanをセットアップします。
PostmanとはHTTPリクエストを自由に定義して送信できるアプリケーションで、APIの開発に活用するとグンと効率がアップします。

連載

本記事は複数記事の連載記事の1つです。

この記事に関連するコミット

Postmanをインストールする

公式ダウンロードページ
https://www.postman.com/downloads/

Macの場合

パッケージマネージャーのHomebrewを使っている場合、ターミナルから以下のコマンドでインストール可能です。

brew install postman

Postmanを実行する

Postmanを起動するとアカウント認証を求められます。
アカウントを作成するとWorkspaces機能(チームでAPIを共同開発)を使用できます。
不要な場合は下に表示されているSkip and go to the appを押せばアカウントを作らなくても使用できます。

Order findリクエストを作成する

その前にLaravelを実行するために開発サーバーを起動します。

php artisan serve

注文IDを指定して1件の注文を取得するOrder findエンドポイントを実行するリクエストを作成します。
「Collections」の「New」をクリックし、HTTP Requestを選択すると右側のペインに作成タブが追加されます。

api.phpに定義しているルーティングを見ながら、リクエストを作成していきます。

  1. リクエストメソッドは「GET」なのでGETをセット
  2. URLに「http://127.0.0.1:8000/api/orders/1」をセット
  3. 「Send」を押して実行

(本編と関係は薄いですが)実行すると、上手く動かないので解消していきます。

実行するとLaravelのトップページが表示される

web.phpのルートに定義されたwelcomeページへ飛ばされてしまいます。
これはPostmanのヘッダーにXHRリクエストであることを示す以下の値が無いため、追加します。

公式のドキュメント XHRリクエストとバリデーション

Key: X-Requested-With
Value: XMLHttpRequest

実行してJSONで結果が返却されればOKです。

orderIdを指定しているのに認識されない

FormRequestはGETパラメータの値はそのままでは対象にならず、必須チェックをしていると絶対に通りません。

"orderId": [
"The order id field is required."
]

fix Include get request parameters in validation のコミットの通り、「validationData」メソッドでバリデーション対象に追加します。

public function validationData(): array
{
    return [
        'orderId' => $this->orderId,
    ];
}

nullエラーが発生する

Attempt to read property \"id\" on null

$orderは取得できずnullの場合があります。
その際に$order->idが参照できずにエラーとなっていました。

IDEでエラーとして検出して欲しいところですがPHPなので期待は禁物です。
もしかするとPHPStormのようなゴリゴリなIDEなら検出してくれるかもしれません。

今回は?を付けてnullの場合はnullを返すようにしておきます。

$order = $useCase->find($data['orderId']);
return response()->json([
    'id' => $order?->id,
    'orderNumber' => $order?->orderNumber,
    'orderDatetime' => $order?->orderDatetime,
]);

Order createリクエストを作成する

findと同様の手順でcreateリクエストを定義していきます。
HTTPメソッドを「POST」に変更し、URLは「http://127.0.0.1:8000/api/orders」を入力します。

JSONのペイロードを以下の手順でセットします。
「Body」→「raw」→「JSON」→JSONフォーマット形式で入力

「Send」をクリックしてレスポンスに作成されたOrderのIDが返ってくればOKです。

そのIDをfindリクエストで指定すれば取得も可能です。

プログラミングカテゴリの最新記事