サクッとLaravelでAPIを作る
作成日: 20240625
最終更新日: 20240626
前提
初学者が超簡易的なAPIを作成してみるをテーマにしたレベル感
PHPとcomposerの環境構築がされていること
DBサーバーを仮想環境やローカルに構築済みであること
目次
- サクッとLaravelでAPIを作る方法
- Laravelプロジェクトの作成
- envの設定
- Modelの作成
- Controllerの作成
- ルーティングの設定(api.php)
- ここまでこれたらAPI完成
- 番外編: エラーで困ったらとりあえずキャッシュクリア
- あとがき
Laravelプロジェクトの作成
composer create-project laravel/laravel {プロジェクト名} --prefer-dist "{バージョン}.*"
- 例
composer create-project laravel/laravel TestProject --prefer-dist "10.*"
envの設定
- これを自分の環境に合わせて書き換える
DB_CONNECTION=
DB_HOST=
DB_PORT=
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=
- 例
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=TestDB
DB_USERNAME=TestUser
DB_PASSWORD=TestPassword
トラブルシューティング
envファイルが存在しないなどの問題が発生した場合は下記記事を参照
Modelの作成
php artisan make:model {Model名}
- 例
php artisan make:model TestModel
ソース例
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class TestModel extends Model
{
// DB接続定義
// Eloquentモデルでは、明示的にtableプロパティでテーブル名を指定しない限りは、モデル名を複数系のスネークケースにしたものがテーブル名として使用される
protected $table = "test_table"; // DBに存在するテーブル名を設定する必要があります
// Eloquentモデルでは基本的に主キーをidというカラムであることを想定している。主キーをid以外のカラムに指定したいとき(オーバーライドしたいとき)にはprotectedのprimaryKeyプロパティを定義する。
protected $primaryKey = "test_id"; // テーブルに存在する主キー名を設定する必要があります
public $incrementing = true; // オートインクリメントを自動でやってくれるかどうか
// タイムスタンプの挿入を自動でやってくれるかどうか
// 監査列を改竄される可能性を減らすためにも自動挿入したほうがいい
// created、updatedのように過去形のカラム名にしないと自動挿入できない
// タイムゾーンの設定はcofig/app.phpから(デフォルトはUTC)
// 設定してもタイムゾーンが変更されないときはキャッシュを削除してから再生成
public $timestamps = true;
// 1つの操作で複数の属性を一度に設定するためにはfillableにしないといけない
// 例えば下記の処理では一度にTestColumnOneとTestColumnTwoという複数の属性を更新しようとしている
// $dataToUpdate = $request->only(['TestColumnOne', 'TestColumnTwo']);
// $columns->update($dataToUpdate);
protected $fillable = ['TestColumnOne','TestColumnTwo'];
}
Controllerの作成
Route::apiResourceに対応するControllerを作成しています
php artisan make:controller {Controller名} --api
php artisan make:controller TestController --api
ルーティングの設定(api.php)
今回はapi.phpにルーティングを設定します。
web.phpでもルーティングできるけどCSRF保護が有効になってるからそこは注意かな
// apiResourceのルーティングはコントローラに定義した関数名と連動する
// ルーティングルートの/api/はapi.phpでルーティングすると省略される(プレフィックスが設定されている)
// この場合、実際のURLはapi/testなので注意
// プレフィックスを変更する場合の参考記事: https://engineer-jose-blog.com/%E3%80%90laravel9%E3%80%91api%E3%81%AEurl%E3%83%97%E3%83%AC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%EF%BC%88%E6%8E%A5%E9%A0%AD/
Route::apiResource('test', TestController::class);
ここまでこれたらAPI完成
後は、ModelとControllerの中身を用途に応じで変更すればAPIとして使えますね!
バリデーションとかBearer認証の実装方法とかは別記事を参照してくれ!
番外編: エラーで困ったらとりあえずキャッシュクリア
「 ; 」または「 && 」でコマンドを同時実行できるようにしてるのでまとめてコピペしてください
- Windows
del bootstrap/cache/* ;
php artisan cache:clear ;
php artisan config:clear ;
php artisan route:clear ;
php artisan view:clear ;
php artisan clear-compiled ;
php artisan optimize ;
del bootstrap/cache/config.php ;
composer dump-autoload
- Linux&MAC
rm bootstrap/cache/* &&
php artisan cache:clear &&
php artisan config:clear &&
php artisan config:cache &&
php artisan route:clear &&
php artisan view:clear &&
php artisan clear-compiled &&
php artisan optimize &&
rm -f bootstrap/cache/config.php &&
composer dump-autoload
それでも解決しないときはlaravel.logを見る
storage/logs/laravel.log
あとがき
細かいことはいいからササっとAPI作成する方法をよこせって実体験があったので
この記事を書いてみました!
説明不足だなとか問題が発生したらコメントなどで連絡してもらえば答えます!
よかったらTwitterフォローしてね!
フォロバしまっす!