54
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】サクッとRest APIを実装する

Last updated at Posted at 2019-06-19

即興でLaravelアプリをローカルホストで立ち上げて、
リクエストを受け取ったらDBからデータを取得してjsonを返却する方法

Laravelのインストール

composerを使ってインストール

composer create-project --prefer-dist laravel/laravel api-test

.envの修正

DB接続のために、以下を修正する
※ MySQL等のDBサーバが立ち上がっていることが前提

.env
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

生成したコントローラを、以下のように編集する

app/Http/Controllers/NewsController.php
<?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));
    }

ルーティングの設定

routes/api.php
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


即興で作ったが、ちゃんとテストコードも書きたい

54
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?