PHP - Laravel - API - コンテンツ


 クラウディア


1. 概要
2. ルート定義
3. コントローラ
4. 再起動
5. 参考サイト

1. 概要

 「API」出力するコンテンツを作成してみます。  サーバが「example.com」として「https://example.com:8080/」へアクセスするものとします。  コントローラのファイル名を「app/Http/Controllers/Api/MessageController.php」とします。

2. ルート定義

 プロジェクトの管理ユーザで、プロジェクトディレクトリへ移動して。

vi routes/api.php
 下記を記述します。

<?php

use Illuminate\Support\Facades\Route;

Route::get('/hello', function () {
    return response()->json([
        'message' => 'Hello from Laravel API!',
        'time' => now()->toDateTimeString()
    ]);
});

Route::post('/echo', function (\Illuminate\Http\Request $request) {
    return response()->json([
        'received' => $request->all(),
        'status' => 'OK'
    ]);
});

3. コントローラ

 前項の状態で。

php artisan make:controller Api/MessageController

  INFO  Controller [app/Http/Controllers/Api/MessageController.php] created successfully.

vi app/Http/Controllers/Api/MessageController.php
 下記の内容となっています。

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class MessageController extends Controller
{
    //
}
 これを下記へ、変更します。

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class MessageController extends Controller
{
    private static $messages = [
        ['id' => 1, 'user' => 'Alice', 'text' => 'Hello from server!'],
        ['id' => 2, 'user' => 'Bob', 'text' => 'Hi Alice!']
    ];

    public function index()
    {
        return response()->json(self::$messages);
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'user' => 'required|string',
            'text' => 'required|string',
        ]);

        $newMessage = [
            'id' => count(self::$messages) + 1,
            'user' => $validated['user'],
            'text' => $validated['text'],
        ];

        self::$messages[] = $newMessage;
        return response()->json($newMessage, 201);
    }
}

4. 再起動

 「apache」の設定をチェックしておきます。

sudo service apache24 configtest
 キャッシュをクリアします。

sudo -u www php /usr/local/www/laravel/artisan cache:clear
sudo -u www php /usr/local/www/laravel/artisan config:clear
sudo -u www php /usr/local/www/laravel/artisan optimize:clear
 この時点で、ルートが通っているかは、プロジェクトディレクトリで。

sudo -u www php artisan route:list
この結果、およそ、下記のような表示となりまして。


  GET|HEAD   / ..................................................................................................
  POST       api/echo ...........................................................................................
  GET|HEAD   api/hello ..........................................................................................
  GET|HEAD   sample .............................................................................................
  GET|HEAD   storage/{path} ....................................................................... storage.local
  GET|HEAD   up .................................................................................................

                                                                                               Showing [6] routes
 「POST api/echo」「GET|HEAD api/hello」「GET|HEAD sample」のルートが存在すれば、よしとします。  「apache」を再起動。

sudo service apache24 restart

5. 参考サイト

 本ページは、「ChatGPT」くんを参考にさせていただきました。

AbemaTV 無料体験