こんにちは、JeffTechです。
この記事で実現できること
- Guzzleのインストール
- Laravel+GuzzleでAPIトークンの取得
説明
今回はPHPのHTTPクライアントであるGuzzleを使用して、とあるAPIのトークンを取得していきたいと思います。
開発環境
- Laravel: 6.2
- Guzzule: 7.2
実装の流れ
- Laravelプロジェクトの作成
- Guzzleのインストール
- 日本時間にする
- データベース設定
- Route
- Controller
- View
実装
1. Laravelのプロジェクトの作成
$ composer create-project --prefer-dist laravel/laravel testAPI "6.*"
testAPI
というLaravel6のプロジェクトが作成されます。
2. Guzzleのインストール
$ composer require guzzlehttp/guzzle
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
を編集します。
return [
ーー省略ーー
'timezone' => 'Asia/Tokyo',
ーー省略ーー
]
4. データベース設定
今回はMySQLを使用していきます。
mysql -u root -p
などでMySQLに入り、test_api
というデータベースを作成してください。
mysql> CREATE DATABASE test_api;
.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
でルートの設定を行っていきます。
<?php
Route::get('/', 'TestApiController@index'); // ここを追記
http://127.0.0.1:8000/
にアクセスするとこれから作成するTestApiController
のindexメソッド
が走るようになりました。
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
を編集していきます。
<?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
を下記の通り編集してください。
<!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