LoginSignup
6
17

More than 5 years have passed since last update.

PHPでWebAPIを叩くモジュール作ってみた

Last updated at Posted at 2019-03-09

はじめに

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'];
    }
}
6
17
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
6
17