Как обновить описание сервиса Guzzle для v5?


У меня есть следующее описание сервиса, которое я использовал довольно долго с более старой версией Guzzle:

[
    'name'        => 'Gist',
    'apiVersion'  => 'v3',
    'baseUrl'     => 'https://api.github.com/',
    'description' => 'Gists and comments access',
    'operations'  => [
        'GetGists'    => [
            'httpMethod' => 'GET',
            'uri'        => '/users/{user}/gists',
            'parameters' => [
                'user'  => [
                    'location' => 'uri',
                    'required' => true,
                ],
                'since' => [
                    'location' => 'query',
                ],
            ],
        ],
        'GetComments' => [
            'httpMethod' => 'GET',
            'uri'        => '/gists/{id}/comments',
            'parameters' => [
                'id' => [
                    'location' => 'uri',
                    'required' => true,
                ],
            ],
        ],
    ],
]

Теперь я перемещаю кучу вещей в текущую версию Guzzle, и это абсолютно отказывается работать с новыми сломанными guzzle/services.

Мой код примерно таков:

$client = new Client;
$client->setDefaultOption('verify', false);
$description  = new Description($this->getServiceDescription());
$guzzleClient = new GuzzleClient($client, $description);
$command      = $guzzleClient->getCommand('GetGists', [ 'user' => $this->user ]);
$gists        = $guzzleClient->execute($command); // $gists is empty array?..

Он ясно понимает команду по крайней мере частично, так как он будет жаловаться, если я не предоставлю требуемый аргумент или неправильно напишу имя.

Но в конце концов это просто пустой массив, и нет никакой удаленной идеи, что мне нужно сделать, чтобы устранить его или как мне нужно обновить описание службы.

URL, который он должен (делает?) доступ есть https://api.github.com/users/Rarst/gists

1 2

1 ответ:

Ладно, похоже, что модель обязательна для интерпретации ответа, и я получил ее в работу (без особого понимания того, что и как модель контролирует :\ ):

[
    'name'        => 'Gist',
    'apiVersion'  => 'v3',
    'baseUrl'     => 'https://api.github.com/',
    'description' => 'Gists and comments access',
    'operations'  => [
        'GetGists'    => [
            'responseModel' => 'getResponse',
            'httpMethod'    => 'GET',
            'uri'           => '/users/{user}/gists',
            'parameters'    => [
                'user'  => [
                    'location' => 'uri',
                    'required' => true,
                ],
                'since' => [
                    'location' => 'query',
                ],
            ],
        ],
        'GetComments' => [
            'responseModel' => 'getResponse',
            'httpMethod'    => 'GET',
            'uri'           => '/gists/{id}/comments',
            'parameters'    => [
                'id' => [
                    'location' => 'uri',
                    'required' => true,
                ],
            ],
        ],
    ],
    'models'      => [
        'getResponse' => [
            'type'                 => 'object',
            'additionalProperties' => [
                'location' => 'json'
            ]
        ]
    ]
]