写真ACのダウンロード数をグラフ化したい【APIサーバー構築編】 ~1日10行コーディング~


5日目

【技術テーマ】

PHPでAPI構築

言語

  • PHP
  • JavaScript

目標成果物

今日は前回までにためたデータJSONで返却するAPIを作りたいと思います。

コードと資料

1. PHP,composerの環境構築

PHPのインストール

brew install [email protected]

composertのインストール

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

これでだけで完結しました。

2. Lavavelでプロジェクト作成

下記のコマンドでLaravelでAPIのもととなるプロジェクトを構築します。


composer create-project --prefer-dist laravel/laravel photo_ac_graf

これだけでLaravelのプロジェクトができるので非常に簡単です。

この状態でプロジェクト内のフォルダに入って

cd photo_ac_graf

PHPを起動すると

php -S 127.0.0.1:8080 -t ./public

このようにLaravelの初期画面が表示されます。これでLaravelの構築は完了です。ここからは実際にコードを書いていきます。

3. データベースからデータを取得

プロジェクト直下にある「.env」ファイルのMySQLの部分を書き換えます。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード

無心でコントローラーなどのファイルを手作業で作成していたのですが、よく考えたらコマンドで作成できたのでコマンドの方で作成していきます。

ルーティング

今回はAPIとしてレスポンスしたいので、routes配下のapi.phpに

api.php
Route::get('/logs', 'LogsController@index');

上記の1行を追加します。

モデルの作成
php artisan make:model Log

今回はとりあえずデーターすべて返せばいいかなって思ってるので、モデルファイルには特に何も書きません。

コントローラーの作成
php artisan make:controller LogsController

コントローラーにはデータを取得してJSONで返す記述をしたいので下記のように記述します。

LogsController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Log;

class LogsController extends Controller
{
    public function index(Request $request){
        $logs = Log::all();
        return response(array('result' => $logs));  
    }
}
動作確認

この状態でhttp://localhost:8080/api/logsにアクセスすると

{
    "result": [
        {
            "id": 1,
            "image_id": 2875969,
            "download": 0,
            "date": "2020-06-06"
        },
        {
            "id": 2,
            "image_id": 2875964,
            "download": 0,
            "date": "2020-06-06"
        },
        {
            "id": 3,
            "image_id": 2875028,
            "download": 0,
            "date": "2020-06-06"
        },
        {
            "id": 4,
            "image_id": 2875022,
            "download": 0,
            "date": "2020-06-06"
        },
        {
            "id": 5,
            "image_id": 2874964,
            "download": 0,
            "date": "2020-06-06"
        },
.
.
.

こんな感じでデータを取得できます。
加工して返したほうがいいかなって思ったりもしたんですけど、一旦どの形式でデータが必要かはグラフを描画するライブラリ次第な気がしたのでこの状態での返却にします。

いやぁ...このLaravelの爆速感タマランですね....
Javaとかと比べて動作確認もリロードするだけですからね...やめられないですね...