はじめに
PHPでWebAPIを叩くモジュールをクラスとして作ってみました。
PHPでAPIを叩きたいときは、クラスのソースをコピペ&継承してご利用いただくと良いと思います。
環境
PHP 7.2
モジュール
※ レスポンスbodyのみ取得することを想定しています。
ApiClient.php
<?php
class ApiClient
{
/**
* リクエストヘッダ
*/
protected const HEADERS
= [
"Content-Type: application/json",
];
/**
* リクエストパラメータをクエリに変換
*
* @param array $requestParameters
*
* @return string
*/
private static function toQueries($requestParameters = [])
{
return '?' . http_build_query($requestParameters);
}
/**
* API通信
*
* @param string $url
* @param string $method
* @param array $requestParameters
* @param array $requestBody
*
* @return array|mixed|object
*/
protected static function execute(
string $url,
string $method,
array $requestParameters = [],
array $requestBody = []
) {
if ( ! empty($requestParameters)) {
$url .= self::toQueries($requestParameters);
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
if ( ! empty($requestBody)) {
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($requestBody));
}
curl_setopt($curl, CURLOPT_HTTPHEADER, static::HEADERS);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$response = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$body = substr($response, $header_size);
$result = json_decode($body, true);
curl_close($curl);
return $result;
}
}
サンプル
サンプルとして、GETとPOSTメソッドを使用するパターンをご紹介します。
sample.php
include_once ('./ApiClient.php');
class Sample extends ApiClient {
/**
* ヘッダ
*/
protected const HEADERS
= [
"User-Agent: Test API Client",
"Content-Type: application/json",
];
/**
* ベースURL
*/
private const BASE_URL = 'https://test.com';
/**
* ユーザー一覧取得 GET
*/
public function getUsers()
{
$url = self::BASE_URL . '/api/v2/users';
$request_parameters = ['clientname' => 'test'];
$result = parent::execute($url, 'GET', $request_parameters);
return $result['data']['users'];
}
/**
* ユーザー登録 POST
*/
public function registerUser ()
{
$url = self::BASE_URL . '/api/v2/users';
$request_parameters = ['clientname' => 'test'];
$request_body = ['name' => 'Taro', 'age' => 22];
$result = parent::execute($url, 'POST', $request_parameters, $request_body);
return $result['data']['user'];
}
}