はじめに
LaravelでWebのCRUDアプリケーションをささっと作る Laravel5.6入門 基本CRUD操作を体で覚える という記事を書きましたが、その続きで、作ったコントローラーをそのままAPIにしてみようと思います。
前提
環境情報などはこちらの記事を参照ください。
上記の記事の続きなので、上記の記事が一通り終わっていることが前提です。
Controllers配下にApiディレクトリを作成する
app/Http/Controllers
配下にApi
ディレクトリを作成します。
Api
ディレクトリ配下に作成したArticlesController.php
をコピーして配置します。
api.phpにルーティングを設定する
APIのルーティングはroutes/api.php
に記述していきます。
api.php
に以下を記述しましょう。
<?php
Route::group(['middleware' => ['api']], function(){
Route::resource('articles', 'Api\ArticlesController');
});
以上を行ったら、php artisan route:list
でルーティングを確認します。
Symfony\Component\Debug\Exception\FatalErrorException : Class 'App\Http\Controllers\Api\Controller' not found
at /Users/Laravel/form/app/Http/Controllers/Api/ArticlesController.php: 7
3: namespace App\Http\Controllers\Api;
4:
5: use Illuminate\Http\Request;
6: use App\Article;
7: class ArticlesController extends Controller
8: {
9: /**
10: * Display a listing of the resource.
11: *
12: * @return \Illuminate\Http\Response
すると上記のようなエラーが表示されました。
コントローラーを修正していく
コピーしたArticlesController.php
に問題があるので、修正をしていきます。
こちらの記事にも書きましたが、namespace
とuse
を足してあげます。
修正するとArticlesController.php
の上部は以下のようになります。
<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Article;
use App\Http\Controllers\Controller;
こちらの状態で再度php artisan route:list
を実行してみると以下のようにAPIのルーティングが設定されているかと思います。
ルーティングを修正
APIはフォーマットをJSONだけを返すようにしたいので、viewが必要ありません。なので、処理でviewだけを返しているcreate
, edit
は削ってしまいましょう。
routes/api.php
を開き、以下を修正します。
<?php
Route::group(['middleware' => ['api']], function(){
Route::resource('articles', 'Api\ArticlesController', ['except' => ['create', 'edit']]);
});
except
を使ってcreate
とedit
のアクションはルーティングを生成しないように除外しました。
php artisan route:list
で確認をすると除外されているのが、確認できます。
コントローラーのアクションを修正していく
エラーの解消と、ルーティングを設定出来たのですが、APIには必要のないアクションがあるので、それらを削除&修正していきます。
create
とedit
の処理は削除してください。
格アクションを以下のように変更していきましょう!
index
public function index()
{
$articles = Article::all();
return $articles;
}
store
public function store(Request $request)
{
$article = new Article;
$article->title = $request->title;
$article->body = $request->body;
$article->save();
return redirect('api/articles');
}
show
public function show($id)
{
$article = Article::find($id);
return $article;
}
update
public function update(Request $request, $id)
{
$article = Article::find($id);
$article->title = $request->title;
$article->body = $request->body;
$article->save();
return redirect("api/articles/".$id);
}
destroy
public function destroy($id)
{
$article = Article::find($id);
$article->delete();
return redirect('api/articles');
}
APIの動作を確認する
APIが動作しているかどうかを確認してみましょう。
php artisan serve
でビルトインサーバーを起動しておきます。
APIの動作確認には、Postmanを使いましょう。
新規作成
記事をAPIで新規作成してみましょう。
Postmanを起動し、HTTPメソッドをPOST
にし、横のURL入力欄にhttp://localhost:8000/api/articles
とします。
そしてタブメニューのBody
でkey
とvalue
を設定してSendを押すことでレコードを新規作成できます。
key | value |
---|---|
title | ほげタイトル |
body | ほげ内容 |
とか入れておきましょう
入力するとこんな感じになるかと思います。
入力したら、右上のSend
をクリックしましょう。すると、レコードが新規作成されているかと思います。
一覧を確認
一覧の確認はHTTPメソッドをGET
に変更し、http://localhost:8000/api/articles
と入力したら、右上のSendをクリックすると下の方にJSONで一覧が返ってくるかと思います。
特定のidを取得
特定のidだけを取得するには、HTTPメソッドをGET
でURLをhttp://localhost:8000/api/articles/id
とすれば取得出来ます。
特定のidの情報を更新
こちらに関しては、ちょっと微妙なのですが、なぜかHTTPメソッドのPUTを使用できず、POSTでやるやり方を説明いたします。
PUTでの方法が分かる方はコメントいただければ幸いです
HTTPメソッドをPOST
URLをhttp://localhost:8000/api/articles/id
で以下のようにします。
以上を見てみるとkeyに_method
が設定され、valueにPUT
が指定されています。
PUTでは更新出来ず、一度POSTでリクエストを出す必要がありました。。
レコードの削除
HTTPメソッドをDELETE
、URLをhttp://localhost/api/articles/id
でSendを押すだけで削除が出来ます!
以上で完了です。