Client::getResponse()   B
last analyzed

Complexity

Conditions 6
Paths 5

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 6.972

Importance

Changes 0
Metric Value
dl 0
loc 20
ccs 7
cts 10
cp 0.7
rs 8.9777
c 0
b 0
f 0
cc 6
nc 5
nop 2
crap 6.972
1
<?php
2
/**
3
 * Class Client
4
 *
5
 * @author       Denis Shestakov <[email protected]>
6
 * @copyright    Copyright (c) 2017, Lan Publishing
7
 * @license      MIT
8
 */
9
10
namespace Lan\Ebs\Sdk;
11
12
use Exception;
13
use Lan\Ebs\Sdk\Helper\Curl;
14
use Lan\Ebs\Sdk\Helper\Debuger;
15
16
/**
17
 * Клиент API
18
 *
19
 * @package      Lan\Ebs
20
 * @subpackage   Sdk
21
 */
22
final class Client
23
{
24
    /**
25
     * Токен клиента
26
     *
27
     * @var string
28
     */
29
    private $token = '';
30
31
    /**
32
     * Конструктор экземпляра класса Client
33
     *
34
     * Экземпляр класса Client нужен для осуществления запросов к API.
35
     *
36
     * @param string $token Токен клиента
37
     *
38
     * Пример:
39
     * ```php
40
     *      $token = '7c0c2193d27108a509abd8ea84a8750c82b3a520'; // токен для тестового подписчика
41
     *
42
     *      $client = new Client($token); // инициализация клиента
43
     * ```
44
     *
45
     * @throws Exception
46
     */
47 19
    public function __construct($token)
48
    {
49 19
        if (empty($token)) {
50
            throw new Exception('Токен пустой');
51
        }
52
53 19
        $this->token = $token;
54 19
    }
55
56
    /**
57
     * Получение ответа сервера API
58
     *
59
     * Выполняется запрос к серверу API и получается ответ в формвте JSON
60
     *
61
     * @param array $request Данные для запроса (url, method)
62
     * @param array $params Параметры запроса
63
     *
64
     * Пример:
65
     * ```php
66
     *      $request = [
67
     *          'url' => '/1.0/resource/book/get/29),
68
     *          'method' => 'GET',
69
     *          'code' => 200
70
     *      ];
71
     *
72
     *      $params = ['fields' => 'name,authors.isbn'];
73
     *
74
     *      $response = $client->getResponse($request, $params);
75
     * ```
76
     *
77
     * @return array Ответ от сервера API приходит в формате JSON
78
     *
79
     * Пример:
80
     * ```json
81
     *      {
82
     *          "type":"object",
83
     *          "data":{
84
     *              "id":29,
85
     *              "name":"Курс теоретической механики",
86
     *              "authors":"Бутенин Н.В., Лунц Я.Л., Меркин Д.Р.",
87
     *              "isbn":"978-5-8114-0052-2"
88
     *          },
89
     *          "count":1,
90
     *          "status":200,
91
     *          "message":"Ok"
92
     *      }
93
     * ```
94
     *
95
     * @throws Exception
96
     */
97 10
    public function getResponse(array $request, array $params = array())
98
    {
99 10
        if (empty($request['url']) || empty($request['method']) || empty($request['code'])) {
100
            throw new Exception('Request url, method or success_code is missing');
101
        }
102
103 10
        $host = Security::getApiHost();
104
105 10
        $response = Curl::getResponse($host, $request['url'], $request['method'], $this->token, $params);
106
107 10
        if (isset($response['debug'])) {
108
            Debuger::dump(array('host' => $host, 'request' => $request, 'params' => $params, 'response' => $response));
109
        }
110
111 10
        if ($response['status'] != $request['code']) {
112 10
            throw new Exception($response['message'], $response['status']);
113
        }
114
115
        return $response;
116
    }
117
}