チュートリアル 中級

Laravel5でWebAPIの作成(API側)

2018/06/26

前回、PHPで、連想配列をJSON形式に変換してデータ送信しました。

今回はさらに一歩踏み込んでWebAPI側を Laravel で構築してみます。

 

仕様

WebAPI は Laravel で構築していきます。

クライアント側で

・「メールアドレス」
・「パスワード」

をPOST送信し、API側で該当するレコードがあれば「ログイン成功!」と表示させます。

ちなみに、このような仕組みをシングルサインオンと呼んだりします。

SSO(シングルサインオン)とは?

1つの ID とパスワードで認証を行い、複数のWebサービスやクラウドサービスにアクセスする仕組み

 

APIの作成

手順

1)Laravelのインストール&設定
2)DB&モデルの作成
3)コントローラの作成
4)ルーティングの作成
5)csrf_token のチェックを無効

 

1)Laravelのインストール&設定

Laravel のインストールや設定については、すでにこのブログでいくつかエントリーしているので割愛します。


cd C:\xampp\htdocs
composer create-project "laravel/laravel=5.2.*" ssoapi

 

2)DB&モデルの作成

1.マイグレーションファイルの作成

とりあえず、デフォルトでついているマイグレーションファイルを使います。

そのままマイグレーションコマンドを実行。


$ php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table

 
2.シーダーファイルの作成

usersテーブルの「ユーザー名」「email」「パスワード」をデモを入力します。


public function run()
{
DB::table('users')->insert([
'name' => 'デモ ユーザー',
'email' => 'demo@gmail.com',
'password' => 'secret',
]);
}

細かい手順については以下を参照してください。

 
3.モデルの作成

チェック
Userモデルはデフォルトで用意されているものがありますが、それは利用せず新規で作成します。

Userテーブルを操作するモデルを作成します。


php artisan make:model User

artisanコマンドで生成されたスケルトンを編集。

カラムにデータを挿入できるようにします。


protected $table = 'users';
protected $primaryKey = 'id';
protected $fillable = [
'name'
, 'email'
, 'password'
];

細かい手順については以下を参照してください。

 

3)コントローラの作成

artisanコマンドでコントローラのスケルトンを作成。


php artisan make:controller UserController

自動生成されたコントローラを編集します。


// Facade利用には 「use Request」とする
use Request;

class UserController extends Controller
{
//
public function login()
{
// 初期設定
$result = false;
$message = '';

// リクエスト取得
$id = Request::input('id');
$password = Request::input('password');

if(empty($id))
{
$message = 'not input id';
}elseif(empty($password))
{
$message = 'not input password';
}else{
// id & pass あり → データ検索
if(strstr($id, '@')) // "@" があるかチェック
{
$findData = \App\User::where('email', $id)->where('password',$password)->first();
}

if(empty($findData))
{
// レコードなし
$message = 'nothing';
}else{
// レコードあり
$result = true;
}
}

// レスポンス生成
if($result)
{
// 該当レコードありの処理
$response = response()->json(
[
'result' => $result
,'id' => $findData->id
,'email' => $findData->email
,'password' => $findData->password
,'name' => $findData->name
,'message' => 'ログイン成功!'
]
);
}else{
//該当レコードなしの処理
$response = response()->json(
[
'result' => $result
,'message' => $message
]
);
}
return $response;

 

4)ルーティングの作成

http://localhost/ssoapi/public/login でアクセスしたら UserController の login メソッド実行


Route::post('login', 'UserController@login');

 

5)csrf_token のチェックを無効

Laravelの場合、外部から POST される場合、csrf_token のチェックを無効にする必要があります。特定の Route にだけ適用/非適用をというのができないので、全部OFFにします。


# app/Http/Kernel.php
:
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            //\App\Http\Middleware\VerifyCsrfToken::class, ←コメントアウト
        ],
:

 
API側の作業は以上になります。

次回はクライアント側の作成をします。

 

-チュートリアル, 中級