Overview

Namespaces

  • Davek1312
    • ApiIntegrator
      • Models

Classes

  • Davek1312\ApiIntegrator\ApiIntegrator
  • Davek1312\ApiIntegrator\Models\ApiIntegratorBaseModel
  • Davek1312\ApiIntegrator\Models\ApiIntegratorRequestModel
  • Davek1312\ApiIntegrator\Models\ApiIntegratorResponseModel
  • Overview
  • Namespace
  • Class
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 
<?php

namespace Davek1312\ApiIntegrator\Models;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\TransferStats;

/**
 * Model for api requests
 *
 * @author  David Kelly <davek1312@gmail.com>
 */
abstract class ApiIntegratorRequestModel extends ApiIntegratorBaseModel {

    /**
     * The API's url
     *
     * @var string
     *
     * @Exclude()
     */
    protected $url;
    /**
     * HTTP connection method eg. GET, POST, PUT..
     *
     * @var string
     *
     * @Exclude()
     */
    protected $connectionMethod;
    /**
     * Number of seconds to wait while trying to connect to a server
     *
     * @var float
     *
     * @Exclude()
     */
    protected $connectTimeout;
    /**
     * Timeout of the request in seconds
     *
     * @var float
     *
     * @Exclude()
     */
    protected $requestTimeout;
    /**
     * Build your request using this documentation: http://docs.guzzlephp.org/en/latest/request-options.html
     *
     * @var array
     *
     * @Exclude()
     */
    protected $requestOptions;
    /**
     * ConnectionException thrown in getHttpResponse()
     *
     * @var ConnectException
     *
     * @Exclude()
     */
    protected $connectException;
    /**
     * @var float
     *
     * @Exclude()
     */
    protected $requestTimeInSeconds;
    /**
     * @var integer
     *
     * @Exclude()
     */
    protected $httpStatusCode;

    /**
     * ApiIntegratorRequestModel constructor.
     *
     * @param string $url
     * @param string $connectionMethod
     * @param float $connectTimeout
     * @param float $requestTimeout
     * @param array $requestOptions
     */
    public function __construct($url, $connectionMethod, $connectTimeout, $requestTimeout, array $requestOptions = []) {
        $this->url = $url;
        $this->connectionMethod = $connectionMethod;
        $this->connectTimeout = $connectTimeout;
        $this->requestTimeout = $requestTimeout;
        $this->requestOptions = $requestOptions;
    }

    /**
     * Returns a new GuzzleHttp\Client with all the request options
     *
     * @return Client
     */
    public function getHttpClient() {
        return new Client($this->getAllRequestOptions());
    }

    /**
     * Merges the default request options with the additional options
     *
     * @return array
     */
    public function getAllRequestOptions() {
        return array_merge($this->requestOptions, [
            'connect_timeout'   => $this->connectTimeout,
            'timeout'           => $this->requestTimeout,
            'http_errors'       => false,
            'verify'            => false,
        ]);
    }

    /**
     * Makes a HTTP request to the API
     *
     * @return Response
     */
    public function getHttpResponse() {
        try {
            return $this->getHttpClient()->request($this->connectionMethod, $this->url,  [
                'on_stats' => function (TransferStats $transferStats) {
                    $this->requestTimeInSeconds = $transferStats->getTransferTime();
                    if ($transferStats->hasResponse()) {
                        $response = $transferStats->getResponse();
                        $this->httpStatusCode =  $response->getStatusCode();
                    }
                }
            ]);
        }
        catch(ConnectException $e) {
            $this->connectException = $e;
        }
        return null;
    }

    /**
     * @return string
     */
    public function getUrl() {
        return $this->url;
    }

    /**
     * @param string $url
     */
    public function setUrl($url) {
        $this->url = $url;
    }

    /**
     * @return string
     */
    public function getConnectionMethod() {
        return $this->connectionMethod;
    }

    /**
     * @param string $connectionMethod
     */
    public function setConnectionMethod($connectionMethod) {
        $this->connectionMethod = $connectionMethod;
    }

    /**
     * @return float
     */
    public function getConnectTimeout() {
        return $this->connectTimeout;
    }

    /**
     * @param float $connectTimeout
     */
    public function setConnectTimeout($connectTimeout) {
        $this->connectTimeout = $connectTimeout;
    }

    /**
     * @return float
     */
    public function getRequestTimeout() {
        return $this->requestTimeout;
    }

    /**
     * @param float $requestTimeout
     */
    public function setRequestTimeout($requestTimeout) {
        $this->requestTimeout = $requestTimeout;
    }

    /**
     * @return array
     */
    public function getRequestOptions() {
        return $this->requestOptions;
    }

    /**
     * @param array $requestOptions
     */
    public function setRequestOptions($requestOptions) {
        $this->requestOptions = $requestOptions;
    }

    /**
     * @return ConnectException
     */
    public function getConnectException() {
        return $this->connectException;
    }

    /**
     * @param ConnectException $connectException
     */
    public function setConnectException($connectException) {
        $this->connectException = $connectException;
    }

    /**
     * @return float
     */
    public function getRequestTimeInSeconds() {
        return $this->requestTimeInSeconds;
    }

    /**
     * @param float $requestTimeInSeconds
     */
    public function setRequestTimeInSeconds($requestTimeInSeconds) {
        $this->requestTimeInSeconds = $requestTimeInSeconds;
    }

    /**
     * @return int
     */
    public function getHttpStatusCode() {
        return $this->httpStatusCode;
    }

    /**
     * @param int $httpStatusCode
     */
    public function setHttpStatusCode($httpStatusCode) {
        $this->httpStatusCode = $httpStatusCode;
    }
}
API documentation generated by ApiGen