2
1

More than 1 year has passed since last update.

Laravel+Guzzleを使用してAPIトークンを取得する方法

Last updated at Posted at 2021-03-15

こんにちは、JeffTechです。

この記事で実現できること

  • Guzzleのインストール
  • Laravel+GuzzleでAPIトークンの取得

説明

今回はPHPのHTTPクライアントであるGuzzleを使用して、とあるAPIのトークンを取得していきたいと思います。

開発環境

  • Laravel: 6.2
  • Guzzule: 7.2

実装の流れ

  1. Laravelプロジェクトの作成
  2. Guzzleのインストール
  3. 日本時間にする
  4. データベース設定
  5. Route
  6. Controller
  7. View

実装

1. Laravelのプロジェクトの作成

ターミナル
$ composer create-project --prefer-dist laravel/laravel testAPI "6.*"

testAPIというLaravel6のプロジェクトが作成されます。

2. Guzzleのインストール

ターミナル
$ composer require guzzlehttp/guzzle

composer.jsonで確認していきます。

composer.json
{

    ーー省略ーー

    "license": "MIT",
    "require": {
        "php": "^7.2.5|^8.0",
        "fideloper/proxy": "^4.4",
        "guzzlehttp/guzzle": "^7.2", // ここチェック
        "laravel/framework": "^6.20",
        "laravel/tinker": "^2.5"
    },

    ーー省略ーー

}

私の場合composer.jsonには"guzzlehttp/guzzle": "^7.2"となっていますが、バージョンが多少異なっていても特に問題はありません。

3. 日本時間にする

APIトークンの有効期限も画面に出したいので、一応日本時間にしておきます。
config/app.phpを編集します。

app.php
return [

    ーー省略ーー

    'timezone' => 'Asia/Tokyo',

    ーー省略ーー

]

4. データベース設定

今回はMySQLを使用していきます。
mysql -u root -pなどでMySQLに入り、test_apiというデータベースを作成してください。

mysql> CREATE DATABASE test_api;

.envに作成したデータベースの設定をしていきます。

.env
// データベース関連のところを抜粋
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test_api // 今回作成したデータベース名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード

5. Route

routes/web.phpでルートの設定を行っていきます。

web.php
<?php

Route::get('/', 'TestApiController@index'); // ここを追記

http://127.0.0.1:8000/にアクセスするとこれから作成するTestApiControllerindexメソッドが走るようになりました。

6. Controller

ターミナル
$ php artisan make:controller TestApiController

このコマンドで、以下のようなapp/Http/Controllers/testApiController.phpが作成されます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestApiController extends Controller
{
    //
}

今回は例として下記の情報で接続したと過程します。

  • ベースURL: openapi.test.api.jp
  • HTTP リクエスト: POST openapi.test.api.jp/v2/test
  • API_KEY: hjfdksaJhjfkdw134fjdklsaKJ93JKL
  • user_id: user_id
  • password: password

先程コマンドで作成したapp/Http/Controllers/testApiController.phpを編集していきます。

TestApiController.php
<?php

namespace App\Http\Controllers;

use Facade\Ignition\QueryRecorder\Query;
use Illuminate\Http\Request;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Header;

class TestApiController extends Controller
{
    public function index()
    {
        // ベースURL
        $base_url = 'openapi.test.api.jp';

        // インスタンス作成
        $client = new Client([
            'base_url' => $base_url,
        ]);

        // API_KEY
        $api_key = 'hjfdksaJhjfkdw134fjdklsaKJ93JKL';

        // オプション
        $options = [
            // デバック(デバックしたい時は記述)
            'debug' => true,

            // 
            // パラメーター(Header)
            'headers' => [
                'api-key' => $api_key,
            ],

            // パラメーター(Query)
            'query' => [
                'user_id' => 'user_id',
            ],

            // パラメーター(Body)
            'json' => [
                'password' => 'password',
            ],
        ];

        // パス
        $path = '/v2/test';

        // リクエストするURL(openapi.test.api.jp/v2/test)
        $send_url = $base_url . $path;

        $response = $client->request('POST', $send_url, $options);

        // JSONデータとして取得
        $json = $response->getBody();
        
        // JSONデータを連想配列にする
        $api_token = json_decode($json, true);

        return view('welcome', compact('api_token'));
    }
}

passwordはTypeがBodyだったのですが、json指定だとうまい感じで変換してくれます。

7. View

JSONを連想配列で取得しているので、有効期限とAPIトークンをそれぞれ取得していきます。
resources/views/welcome.blade.phpを下記の通り編集してください。

welcome.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

    </head>
    <body>
        <p>有効期限:{{ date('Y年m月d日 H時i分s秒', $api_token['expires_at']) }}</p>
        <p>APIトークン:{{ $api_token['token'] }}</p>
    </body>
</html>

有効期限はミリ秒で取得されるので、date関数でフォーマットを整えています。
これで、php artisan serveしてからブラウザで確かめると、無事有効期限とAPIトークンを取得できるかと思います。

最後に

少しでも役に立った!という時は、いいねをポチッとして
フォローしてくださると嬉しいです、、、笑

役に立たなかった時は、怒らないでコメント頂けますと幸いです笑

Twitterもやってますので、よかったら見てみてくださいね!
https://twitter.com/jefftechsaku

2
1
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
2
1