LoginSignup
0
0

サクッとLaravelでAPIを作る

作成日: 20240625
最終更新日: 20240626

前提

初学者が超簡易的なAPIを作成してみるをテーマにしたレベル感
PHPとcomposerの環境構築がされていること
DBサーバーを仮想環境やローカルに構築済みであること

目次

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フォローしてね!
フォロバしまっす!

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0