Я пытаюсь получить эту работу весь день, так что это последнее мое средство.Guzzle - Get Raw JSON Response
Я пытаюсь вызвать API с помощью жрать, и это drupal_symfony_inject модуль: https://github.com/Capgemini/drupal_symfony_inject
У меня есть следующие конфигурации в hook_symfony_yaml_config_params():
// Assets client.
$assets_resources_file = $resources_folder . '/moderation.json';
$param_array['bubl_api_assets_service_client.service.description'] = $assets_resources_file;
$param_array['bubl_api_assets_client.class'] = 'BUBL\Clients\Assets\Client';
И это в моем определении сервиса:
{
"name": "BUBL moderation client",
"apiVersion": "v1",
"description": "BUBL moderation REST API client",
"operations": {
"getAllBubls": {
"httpMethod": "GET",
"uri": "/su/bubls",
"responseModel": "getJSONResponse",
"parameters": {
"before": {
"location": "uri",
"type": "integer",
"required": false
},
"after": {
"location": "uri",
"type": "integer",
"required": false
},
"max": {
"location": "uri",
"type": "integer",
"required": false
}
}
}
},
"models": {
"getJSONResponse": {
"type": "object",
"additionalProperties": {
"location": "json"
}
},
"getHTMLResponse": {
"type": "object",
"properties": {
"html": {
"location": "body",
"type": "string"
}
}
}
}
}
У меня есть клиент с операциями, просто возвращающими ответ от gu zzle, например:
public function getAllBubls($before = NULL, $after = NULL) {
$response = $this->client->sendRequest('getAllBubls', ['before' => $before, 'after' => $after]);
return $response;
}
И при его использовании он работает абсолютно нормально, вот так:
global $_drupal_symfony_di_container;
/** @var BUBL\Clients\Moderation\Client $client */
$client = $_drupal_symfony_di_container->get('bubl_api_moderation_client');
if (is_callable(array($client, $service_name))) {
$response = $client->{$service_name}();
return $data_source = $response['bubls'];
}
Теперь моя проблема в том, что ответ побежал через json_decode, прежде чем я получить ее, и давая мне массив, который вызывает у меня всевозможные проблемы с модулем migrate. Я знаю, что это из-за множества responseModel в
"responseModel": "getJSONResponse",
Однако, я не могу найти способ, чтобы просто запросить необработанный ответ. Я пытался (как упоминалось в документации), удаление responseModal вообще и добавление в:
"responseType": "primitive",
и (отдельно я имею в виду)
"responseModel": "getHTMLResponse",
Но, к сожалению, я не получал никаких данных назад - либо пустой массив. Я просто не могу найти способ игнорировать весь синтаксический анализ и просто получить ответ в JSON? Является ли это возможным? Я также попытался создать другую модель для использования, но типы - это либо массив, либо объект, а остальные свойства действительно запутывают меня в документации, поэтому ничто из того, что я пробовал, не помогает. Похоже, что он не должен проходить через модель или класс ответа вообще, и что есть какой-то способ обойти его, возможно («примитивный» имел бы смысл для меня, но, увы, нет).
BTW Я новичок в жужжании, и я знаю, что это кажется немного сконструированным для этого вызова, но это важно в других местах, оно на месте, и я хотел бы обойти его, если это возможно. используй это.
Спасибо.
Это может быть полезно: http://guzzle3.readthedocs.org/http-client/response.html#response-body - вы должны получить ответ в виде строки. – Richard
Я читал эти документы, но я не могу понять, что с ними можно сделать, реализация, которую мы имеем, завершена в определениях сервисов, поэтому не похоже, что я могу перехватить запрос в этот момент –
Ok Я нашел несколько дополнительных документов, я отвечу им в ответ. благодаря –