即興でLaravelアプリをローカルホストで立ち上げて、
リクエストを受け取ったらDBからデータを取得してjsonを返却する方法
Laravelのインストール
composerを使ってインストール
composer create-project --prefer-dist laravel/laravel api-test
.envの修正
DB接続のために、以下を修正する
※ MySQL等のDBサーバが立ち上がっていることが前提
DB_CONNECTION=mysql
-DB_HOST=127.0.0.1
+DB_HOST={接続対象ホスト}
DB_PORT=3306
-DB_DATABASE=homestead
+DB_DATABASE={接続対象DBスキーマ名}
-DB_USERNAME=homestead
+DB_USERNAME={接続対象DBユーザ名}
-DB_PASSWORD=secret
+DB_PASSWORD={接続対象DBパスワード}
手動で.env
ファイルを作成しようとしたら、composerを使ってインストールした場合は、いつの間にか自動で作成されるようになったんですね。便利な世の中になりました。
DB接続用のモデル作成
以下コマンドを実行
php artisan make:model News
必要に応じて、生成されたapp/News.php
を修正する
参考:https://readouble.com/laravel/5.8/ja/eloquent.html
APIコントローラの作成
以下コマンドを実行
php artisan make:controller NewsController --resource
※--resource
のオプションをつけると、作成されるコントローラに一般的なCRUD用のアクションを自動生成してくれる
参考:https://readouble.com/laravel/5.8/ja/controllers.html#resource-controllers
生成したコントローラを、以下のように編集する
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
+use App\News;
class NewsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
- //
+ return response(News::all());
}
// ... 略
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
- //
+ return response(News::find($id));
}
ルーティングの設定
Route::resource('news', 'NewsController');
動作確認
以下コマンドを実行し、ローカルホストでWebサーバを立ち上げる
(Laravel標準のビルドインサーバ機能を利用)
$ php artisan serve
Laravel development server started: <http://127.0.0.1:8000>
表示されたURLにapi/news
をつけてアクセスすると、NewsControllerのindex
アクションが呼び出され、newsテーブルの全件データがjsonで返却される
http://127.0.0.1:8000/api/news
以下のようにapi/news/{id}
とアクセスすると、NewsControllerのshow
アクションが呼び出され、任意のidのみ抽出したjsonが返却される
http://127.0.0.1:8000/api/news/10650
即興で作ったが、ちゃんとテストコードも書きたい