作成してみよう!LaravelでAPIを扱う方法【初心者向け】
初心者向けにLaravelでAPIを使う方法について解説しています。APIを提供することで他のアプリケーションとやりとりすることができます。簡単なAPIを作成する手順を説明しているので、書き方を理解しておきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
LaravelでAPIを扱う方法について解説します。
CRUD操作のAPIを実際に作成しているので、書き方を覚えておきましょう。
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。
今回は、Laravelに関する内容だね!
どういう内容でしょうか?
Laravelでapiを使う方法について詳しく説明していくね!
お願いします!
APIとは
API(Application Programming Interface)は、アプリケーション同士を協調して動作させるための仕様です。
アプリケーションはAPIを提供することで、他のアプリケーションとやりとりすることができます。
例えば、Twitter、Facebookなど様々な事業者は自社のサービスを外部のアプリケーション向けに提供するために、Web APIを公開しています。外部のアプリケーションはそれらのWeb APIを通してサービスを利用できます。
私たちがWebページを参照する場合、WebブラウザがHTTPのURLにリクエストし、レスポンスとして返されるHTMLを描画します。
それと同様にWeb APIの場合も、アプリケーションがHTTPのURLにリクエストし、レスポンスとして返されるデータを処理します。
Web APIでは、HTTP経由でJSON形式のメッセージを送受信するのが一般的です。JSON(JavaScript Object Notation)は、JavaScriptの記法をベースにオブジェクトを表記する方法で、様々なプログラミング言語で使われる汎用的な形式です。
APIの作成方法(crudなど)
基本的なCRUD(Create, Read, Update, Delete)の操作について、一番簡単な作成方法を説明します。
以下のような手順で作成します。
- データベースマイグレーションを実施する。
- モデルを実装する。
- リソースコントローラを実装する。
- APIリソースルートを追加する。
マイグレーション、モデルはWebページと共用できます。
コントローラ、ルートはAPI用の実装になり、Webページ用とは以下の点で異なります。
- リソースコントローラでは、フォームを表示するアクション(create, edit)が不要。
- 各アクション(index, show, update, destroy)はJSON形式の文字列を返す。
- ビューの実装が不要。
- routes/api.phpファイルにルートを追加する。
実際のアプリケーションでは、認証やバリデーション等の実装も必要になりますが、今回は説明しません。
また、APIリソースを使って作成する方法についても、今回は説明しません。
[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは
実際に書いてみよう
例として、Post(投稿)というリソースに対するCRUD操作のAPIを書いてみましょう。
ターミナルでLaravelのartisanコマンドを実行して、マイグレーション、モデル、リソースコントローラの雛形を一気に生成します。
$ php artisan make:model -m -c -r Post
生成されたマイグレーションで、テーブルに必要なカラム(title, contentなど)を定義しておきます。
$table->string('title'); $table->text('content');
ターミナルでLaravelのartisanコマンドを実行して、マイグレーションを適用します。
$ php artisan migrate
モデルで、$fillableプロパティを定義しておきます。複数代入の脆弱性を排除するためです。
// 複数代入可能な属性を指定 protected $fillable = ['title', 'content'];
リソースコントローラの各アクションの中身を実装します。
アクションからEloquentオブジェクトやコレクションなどを返すとJSONに変換されます。
create、editは不要なので削除します。
public function index() { // 投稿を作成日時の新しい順でペジネーションした結果を返す return Post::latest()->paginate(); } public function store(Request $request) { // リクエストパラメータから取得した値をもとにPostを作成する return Post::create($request->all()); } public function show(Post $post) { // Eloquentオブジェクトを返す return $post; } public function update(Request $request, Post $post) { // リクエストパラメータから取得した値をもとにPostを更新する $post->update($request->all()); return $post; } public function destroy(Post $post) { // Eloquentオブジェクトを削除する $deleted = $post->delete(); return compact('deleted'); }
routes/api.phpファイルに、APIリソースルートを追加します。
Route::apiResource('posts', 'PostController'); ターミナルでLaravelのartisanコマンドを実行して、このルートを確認してみます。 $ php artisan route:list --path=posts +--------+-----------+------------------+---------------+---------------------------------------------+------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+------------------+---------------+---------------------------------------------+------------+ | | GET|HEAD | api/posts | posts.index | AppHttpControllersPostController@index | api | | | POST | api/posts | posts.store | AppHttpControllersPostController@store | api | | | DELETE | api/posts/{post} | posts.destroy | AppHttpControllersPostController@destroy | api | | | PUT|PATCH | api/posts/{post} | posts.update | AppHttpControllersPostController@update | api | | | GET|HEAD | api/posts/{post} | posts.show | AppHttpControllersPostController@show | api | +--------+-----------+------------------+---------------+---------------------------------------------+------------+
APIの動作を確認するには、Postmanなどのアプリを利用すると便利です。
ここでは、curlコマンドを実行して、APIの動作を確認してみます。出力をjqコマンドで処理すると見易く整形されるため便利です。
以下のような内容のpost.jsonファイルを作成しておきます。
{ "title": "Post 1", "content": “投稿1です。” }
ターミナルで以下のようにcurlコマンドを実行すると、createアクションの動作を確認できます。
$ curl localhost:8000/api/posts -s -H "Content-Type: application/json" --data-binary @post.json | jq { "title": "Post 1", "content": "投稿1です。", "updated_at": "2018-07-22 07:12:19", "created_at": "2018-07-22 07:12:19", "id": 1 }
ターミナルで以下のようにcurlコマンドを実行すると、showアクションの動作を確認できます。
$ curl localhost:8000/api/posts/1 -s | jq { "id": 1, "title": "Post 1", "content": "投稿1です。", "created_at": "2018-07-22 05:43:59", "updated_at": "2018-07-22 05:43:59" }
他にもPostをいくつか登録しておきます。
ターミナルで以下のようにcurlコマンドを実行すると、indexアクションの動作を確認できます。
$ curl localhost:8000/api/posts -s | jq { "current_page": 1, "data": [ { "id": 2, "title": "Post 2", "content": "投稿2です。", "created_at": "2018-07-22 05:46:44", "updated_at": "2018-07-22 05:46:44" }, { "id": 1, "title": "Post 1", "content": "投稿1です。", "created_at": "2018-07-22 05:43:59", "updated_at": "2018-07-22 05:43:59" } ], "first_page_url": "http://localhost:8000/api/posts?page=1", "from": 1, "last_page": 1, "last_page_url": "http://localhost:8000/api/posts?page=1", "next_page_url": null, "path": "http://localhost:8000/api/posts”, "per_page": 15, "prev_page_url": null, "to": 2, "total": 2 }
post.jsonファイルの内容を以下のように変更しておきます。
{ "title": "Post 1 (updated)", "content": “投稿1です。編集済" }
ターミナルで以下のようにcurlコマンドを実行すると、updateアクションの動作を確認できます。
$ curl localhost:8000/api/posts/1 -s -H "Content-Type: application/json" --data-binary @post.json -X PUT | jq { "id": 1, "title": "Post 1 (updated)", "content": "投稿1です。編集済", "created_at": "2018-07-22 05:43:59", "updated_at": "2018-07-22 10:00:33" }
ターミナルで以下のようにcurlコマンドを実行すると、destroyアクションの動作を確認できます。
$ curl localhost:8000/api/posts/1 -s -X DELETE | jq { "deleted": true }
以上、ごく簡単なAPIの作成方法を説明しました。
この記事を監修してくれた方
杉本 隆也(すぎもとたかや) WebアプリやiOSアプリの受託開発をしながら、 開発実績: マッチングサービス、カスタマーサービス、決済ツール、SNSアプリ、音遊びアプリなど。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。