Лучшая практика при внедрении сервисного клиента, который упаковывает Guzzle PHP - PullRequest
0 голосов
/ 21 декабря 2018

Мне нужно создать класс PHP, в основном, клиент, который обертывает PHP-клиент Guzzles для получения и отправки данных в REST API.Этот клиент будет находиться в пакете композитора, который потребуется приложению Laravel

. Как лучше всего реализовать это таким образом, чтобы я мог протестировать пакет / клиент.

В настоящее время моя реализация должна иметь метод в классе 'call ()', который обернет Guzzles -> request

аналогично

    public function call(string $method , string $path, array $query = [], array $auth = [])
    {
        $query   = array_merge($query, ['api_key' => $this->apikey]);
        $uriPath = $this->buildApiUri($path);

        try {
            $resp = $this->client->request($method, $uriPath, [
                'auth'  => $auth,
                'query' => $query,
            ]);

        } catch (RequestException $e) {
            Log::error('FAIL ' . $uriPath . ' fetch: ' . $e->getMessage());
        }

        return $this->jsonDecodeOrError($uriPath, $resp);
    } 

  protected function buildApiUri($path)
    {
        return '/api/' . $this->api_version . $path;
    }

Я также думаю, что единственный способпроверить это будет, чтобы передать клиент guzzle в мой собственный клиент, чтобы я мог использовать обработчики имитации Guzzles

use GuzzleHttp\Client;

public function __construct($apikey, Client $client, $max_retries = 5)

Мой клиент будет иметь только несколько методов для запуска, которые по существу вызывают различные конечные точки отдыха.

Другая проблема, с которой я сталкиваюсь, - это нумерация страниц.Остальной API, о котором я говорю, возвращает постраничные данные, и я хотел бы обработать нумерацию страниц в моем клиенте.

, т. Е. - если вызов / users возвращает 10 пользователей настраница, в общей сложности 100 пользователей , я хотел бы, чтобы метод -> getUsers () в моем клиентском классе возвращал 100 записей.

Можно ли использовать жрет или сделатьЗацикливайтесь на каждом запросе до тех пор, пока я не получу все записи из API.

Пакет не обязательно должен быть привязан к Laravel (провайдеру услуг)

Заранее спасибо

...