LaravelでAPIを作る為のメモ
Laradockで開発環境を構築したら、次はAPIを作ってみたいと思います。
メモレベルなので、分かりづらいかもしれません。
Controllerを作る
コマンドでコントローラーを追加する。 コントローラーの命名規則として複数形にする必要がある。
今回はAPIを作るのが目的なので、app/Http/Controllers/Api
にコントローラーを作成する。
controllerを作る
一番シンプルなコントローラーを作る。
php artisan make:controller Api/ContentsController
◎app/Http/Controllers/ContentsController.php
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; class ContentsController extends Controller { // }
Resourcefulなcontrollerを作る
Resourcefulなcontrollerを作るには-r
をつける。
php artisan make:controller Api/ContentsController -r
◎app/Http/Controllers/ContentsController.php
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; class ContentsController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }
Modelを作成する
コマンドでモデルを追加する。 オプションに-m
を付けることで、マイグレーションファイルも合わせて追加することもできる。
php artisan make:model Content -m
◎app/Article.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Content extends Model { // }
マイグレーションファイルを編集
DBのテーブルにカラムを追加する為、先程モデルを追加したときに、作成した以下のマイグレーションファイルを編集します。 database/migrations/2019_01_20_133119_create_contents_table.php
titleとbodyのカラムを追加します。
public function up() { Schema::create('contents', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('body'); $table->timestamps(); }); }
マイグレーションを実行する。
php artisan migrate
contentsテーブルが作成される。
+-------------------+ | Tables_in_default | +-------------------+ | contents | | migrations | | password_resets | | users | +-------------------+
ルーティングの設定
routes/api.php
にAPIのルーティングを設定する。
<?php Route::group(['middleware' => ['api']], function(){ Route::resource('contents', 'Api\ContentsController'); });
不要なアクションは、メソッド、ルーティング共に削除しておく
ルーティングからの削除は、ホワイトリストを設定する方法と、ブラックリストを設定する方法がある。
// ホワイトリスト Route::resource('contents', 'ContentsController', ['only' => ['index', 'show', 'update','store', 'destroy']]); // ブラックリスト Route::resource('contents', 'ContentsController', ['except' => ['edit','create']]);
コントローラーを修正
合わせてコントローラーも修正する。
use App\Content;
を追加してモデルを読み込む。
◎ app/Http/Controllers/Api/ContentsController.php
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Content; use App\Http\Controllers\Controller;
コントローラーにアクションを追加
function | method | api | params |
---|---|---|---|
index | GET | http://localhost/api/contents/ | |
create | GET | http://localhost/api/contents/ | |
show | GET | http://localhost/api/contents/{content} | |
edit | GET | http://localhost/api/contents/{content}/edit | |
store | POST | http://localhost/api/contents/ | {“title”:“タイトル“,”body”:“本文“} |
update | PUT | http://localhost/api/contents/{content} | {“title”:“タイトル“,”body”:“本文“} |
delete | DELETE | http://localhost/api/contents/{content} |
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Content; use App\Http\Controllers\Controller; class ContentsController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $Contents = Content::all(); return $Contents; } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $Content = new Content; $Content->title = $request->title; $Content->body = $request->body; $Content->save(); return redirect('api/Contents'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $Content = Content::find($id); return $Content; } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $Content = Content::find($id); $Content->title = $request->title; $Content->body = $request->body; $Content->save(); return redirect("api/Contents/".$id); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { $Content = Content::find($id); $Content->delete(); eturn $article; } }
APIを実行してみる。
ツールを利用してAPIを実行してみます。 DBの情報が取得できるのが確認できます。
※ダミーのデータを入れている前提(シーディングしたり))