【Laravel】簡単なAPI備忘録

目次

はじめに

APIに対するイメージがイマイチだったのですが、イメージできた瞬間があったので備忘録。

そもそもAPIとは?

ソフトウェアにAPIという外部とやりとりする窓口を作り、外部アプリとコミュニケーションや連携ができる状態にする。

個々でわかる人にはわかると思うのですが、う〜ん、むずい。

ということで言葉で理解することを放棄。

f:id:makoo5:20190813175831p:plain

ちなみに筆者は、json=APIと思っていた。

LaravelでAPIを使用してみる

  • DBの作成(できてる前提)
  • マイグレーション作成
  • モデルの作成
  • コントローラーの作成と記述
  • ルーティング
  • 注意点

マイグレーション作成

create_samples_table

public function up()
    {
        Schema::create('***', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('msg'); //追記
            $table->timestamps();
        });
    }

モデルの作成

use Illuminate\Database\Eloquent\Model;

class ChatMessage extends Model
{
    protected $table = '***'; 
    protected $fillable = ['msg'];
    
}
  • $tableはモデルと連動させるテーブル名を記述
  • $fillable$guarded
    • $fillabeはユーザーによる値の変更を許可する
    • $guardedはユーザーから値を変えて欲しくない値 
    • [注意] 上記2つは同時に指定することはできない

参考

qiita.com

コントローラーの作成と記述(今回はindexとstoreのみ)

--resourceをつけてあげることでCRUDのアクションを自動生成してくれる

php artisan make:controller SampleController --resource

上記のコマンド叩くと下記のSampleControllerが生成される。

アクション

  • index : 一覧
  • store : POST送信時に呼ばれます
  • show : 詳細一覧
  • edit : 編集機能
  • update : アップデート
  • destroy : sakujo
    public function index()
    {
     //処理
    }

    public function store(Request $request)
    {
     //処理
    }

    public function show($id)

    public function edit($id)

    public function update(Request $request, $id)

    public function destroy($id)

記述

//全件表示(GETで呼ばれた時のアクション)
    public function index()
    {
     $chat = Chatmsg::all();
     return $chat;
    }

//POSTで呼ばれた時のアクション
    public function store(Request $request)
    {
//postのrequestをモデルのインスタンスに適応して、保存
     $chatmsg = new Chatmsg;
     $chatmsg->msg = $request->msg;
      return $chatmsg->save;
    }

ルーティング

コントローラー名:ChatReplyController

api.php

Route::resource('/talk/reply','ChatReplyController');

注意

ルーティングは/talk/replyなっているが、xx/talk/replyにアクセスしても何も表示されない。

api.phpに記述した場合、ルーティングには下記のように記述するが、/talk/replyの前にapiをつけないといけない。

Route::resource('/talk/reply','ChatReplyController');

xx/api/talk/replyとなる。