laravel12.laravel_110
R e i - D r e a m
for Laravel
TOP > Laravel Ver.12 > その他中間モジュール②
Guest
login

最終投稿日:2026年3月18日

【検証環境】- Laravel Ver.12 - Windows11 - Rocky Linux Ver.8 - MySQL Ver.8 - MySQL Ver.9
目次
○ REST APIの基本
[外部サーバとのやりとりはコレ!]
APIサンプル
[SNSのつぶやきを取得するAPI]
FTP連携
[外部サーバとのファイルのやりとりはコレ!]
バッチ処理
[バッチの手動実行、スケジューラ実行]
API
はじめに
APIとは『アプリケーション・プログラム・インターフェース』の略です。
要はアプリ同士の取り決め(インターフェース)により情報のやり取りをしましょうと言う事です。
パソコンにも『USB-A』『USB-C』などの差込口がありますね。
あれもインターフェースです。
『USB-C』の差込口に『USB-A』をぐりぐりしても刺さりませんよね?
APIも同じで、ある取り決め(インターフェース)に従って情報のやり取りをします。
今回は最もポピュラーな【REST API】の説明となります。
APIサービス
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]コマンドから作成します。
[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すが、そのままリターンしましょう。
正常に終了すると以下のファイルが追加・更新されます。
[更新] ~\bootstrap\app.php
[追加] ~\routes\api.php
それでは任意のコントローラにサービスを作成しましょう。
任意のコントローラ

    public function api_exe(Request $request) {
        $data = ['message' => '成功', 'id' => 123];
        return response()->json($data, 200);
    }

最もシンプルに記述してみました。
単純に配列の内容をJSONで返却するだけのサービスです。
サービスと言っても通常のメソッドを作成する感じです。
違いと言えば画面を描画しないので「response」を返却するくらいです。
後は他システムや、自システムのAPIクライアントからのリクエストに対し処理してやりましょう。
APIクライアント
APIクライアントは、リクエスト側になるため、APIサービスに対して発信する必要があります。
今回は先ほど《APIサービス》で作成した内容に対しての説明とします。
サービス側の設定は以下とします。
    Route::get('/api_test/api_exe', [App\Http\Controllers\ApiController::class, 'api_action']);
ではこの仮APIサービスを呼び出すAPIクライアントを作成します。
作成場所は何処でも良いですが、今回は『~\app\Services\ApiClient.php』に作成します。
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();
    }
}

《機能説明》
・コンストラクタでベースとなるURLを作成
・「関数:getItems」にてAPI詳細設定
引数:[GET/POST]パラメータ
[エンドポイント][パラメータ]を「$this->client()->get()」または「$this->client()->post()」の引数にし、APIを取得する
・引数[$query]で作成したURLは「?hoge=aaa&hoge=bbb」形式となるので、ルート設定は注意です
・取得処理自体は「関数:client」となります
・メソッドチェーン『->throw()』を繋げる事で、異常時に例外『RequestException』で受ける事ができます。
《[Header]を付与してリクエストする場合》
リクエストする際にメソッドチェーン「->withHeaders([{KEY=>VAL},{KEY=>VAL}])」を追加します。
サービス側は「$request->header('{キー名}')」でヘッダーの内容を確認できます。
ログインしてコメントを残そう!!


レンズモード 【新規購入限定用】
きっぷる