2015-11-19 4 views
0

Я пытаюсь получить эту работу весь день, так что это последнее мое средство.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 Я новичок в жужжании, и я знаю, что это кажется немного сконструированным для этого вызова, но это важно в других местах, оно на месте, и я хотел бы обойти его, если это возможно. используй это.

Спасибо.

+0

Это может быть полезно: http://guzzle3.readthedocs.org/http-client/response.html#response-body - вы должны получить ответ в виде строки. – Richard

+0

Я читал эти документы, но я не могу понять, что с ними можно сделать, реализация, которую мы имеем, завершена в определениях сервисов, поэтому не похоже, что я могу перехватить запрос в этот момент –

+0

Ok Я нашел несколько дополнительных документов, я отвечу им в ответ. благодаря –

ответ

0

Ok, так что я нашел несколько вещей, которые помогли мне, именно это https://github.com/Rarst/wporg-client/blob/33fb0dcce9f170b92824d09f5717ca814d7ecd29/php/WporgService.php

который основан на жрут, поэтому я взял параметры модели отклика ответа «тела» и сделал это:

"getRawResponse": { 
     "type": "object", 
     "properties": { 
     "body": { 
      "location": "body", 
      "type": "string" 
     } 
     } 
    } 

Который вернул поток Гузл.Так в поисках потока документации Я нашел Not getting expected response from Guzzle

Который направил меня, чтобы изменить мою просьбу

public function getAllBubls($before = NULL, $after = NULL) { 
    $response = $this->client->sendRequest('getAllBubls', ['before' => $before, 'after' => $after]); 
    // Get the raw JSON response. 
    return $response['body']->getContents(); 
    } 

Который вернулся мне неанализируемый JSON.