API
はじめに
要はアプリ同士の取り決め(インターフェース)により情報のやり取りをしましょうと言う事です。
パソコンにも『USB-A』『USB-C』などの差込口がありますね。
あれもインターフェースです。 『USB-C』の差込口に『USB-A』をぐりぐりしても刺さりませんよね?
APIも同じで、ある取り決め(インターフェース)に従って情報のやり取りをします。 今回は最もポピュラーな【REST API】の説明となります。
APIサービス
ですので『~/routes/web.php』の様に「URL」と「コントローラ」のマッピングが必要となります。
ただし、LaravelではAPIマッピングを『web.php』ではなく、『api.php』へ記述します。
特徴としては、このファイルに登録したアドレスには勝手に「api」のプレフィックスが付与されます。
例)
Route::get('/hoge', [App\Http\Controllers\HogeController::class, 'index']);
と設定した場合のURLは以下となります。
http://{ドメイン}/{コンテキスト}/api/hoge では早速設定を。。 おや、『~/routes/api.php』ファイルがありません。
そうです。デフォルトでは存在しないファイルとなり、お約束の[artisan]コマンドから作成します。
C:\~\laravel_12>php artisan install:api
./composer.json has been updated
Running composer update laravel/sanctum
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking laravel/sanctum (v4.3.1)
~ 省略 ~
One new database migration has been published. Would you like to run all pending database migrations? (yes/no) [yes]:
>
INFO Running migrations.
2026_03_11_163051_create_personal_access_tokens_table ................................... 390.00ms DONE
INFO API scaffolding installed. Please add the [Laravel\Sanctum\HasApiTokens] trait to your User model.
C:\~\laravel_12>
途中対話モードになりmすが、そのままリターンしましょう。
正常に終了すると以下のファイルが追加・更新されます。
[追加] ~\routes\api.php
public function api_exe(Request $request) {
$data = ['message' => '成功', 'id' => 123];
return response()->json($data, 200);
}
単純に配列の内容をJSONで返却するだけのサービスです。
サービスと言っても通常のメソッドを作成する感じです。
違いと言えば画面を描画しないので「response」を返却するくらいです。
後は他システムや、自システムのAPIクライアントからのリクエストに対し処理してやりましょう。
APIクライアント
今回は先ほど《APIサービス》で作成した内容に対しての説明とします。 サービス側の設定は以下とします。
Route::get('/api_test/api_exe', [App\Http\Controllers\ApiController::class, 'api_action']); ではこの仮APIサービスを呼び出すAPIクライアントを作成します。
作成場所は何処でも良いですが、今回は『~\app\Services\ApiClient.php』に作成します。
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
use Illuminate\Http\Client\RequestException;
class ApiClient {
protected string $baseUrl;
public function __construct() {
$this->baseUrl = 'http://localhost/laravel_12/api/api_test';
}
// API実行
protected function client() {
return Http::acceptJson()->baseUrl($this->baseUrl)->timeout(10)->throw();
}
// ○○○APIリクエスト
public function getItems(array $query = []) {
try {
$res = $this->client()->get('/api_exe', $query);
} catch (RequestException $e) {
var_dump($e->response->status()); // ヘッダーレスポンスコード取得
var_dump($$e->response->body()); // エラー内容取得
return false;
}
// 配列にして返却
return $res->json();
}
}
・「関数:getItems」にてAPI詳細設定
[エンドポイント][パラメータ]を「$this->client()->get()」または「$this->client()->post()」の引数にし、APIを取得する
・取得処理自体は「関数:client」となります
・メソッドチェーン『->throw()』を繋げる事で、異常時に例外『RequestException』で受ける事ができます。
サービス側は「$request->header('{キー名}')」でヘッダーの内容を確認できます。



