У меня есть API, чтобы использовать для службы, которая предоставляет финансовые котировки на подержанные автомобили. Мое приложение написано на PHP, и я добавил Guzzle 5 через Composer.
Ранее я использовал другие API, которые для отправки использовали XML или просто массив параметров POST, но этот более сложный.
Этот API использует объекты DTO, и документация говорит это:
relies heavily on DTOs to carry data between client and server. The following
sections detail the DTOs. Each web service will serialise and transfer them in their own
formats/methods. It is the responsibility of the client application to correctly construct requests and
parse responses. It is suggested that object serialization and deserialization be used for easier usage.
Так что я не знаю, как этого добиться с помощью Guzzle. Некоторые типы перечисления являются такими, как «RequestAssetMotorVehicle». Вы бы использовали StdClass или Arrays, делающие это на PHP? Или занятия? Как бы это сериализовать?
Без документации API это трудно выразить. Но я попытаюсь. Мы будем использовать общий REST API на основе JSON
Стандарты DTO обычно для каждой компании, а иногда и для приложения. Вкратце: DTO — это сериализованный объект.
Допустим, это запрос POST (мы создаем нового пользователя)
{
'name':'john',
'foo':'bar',
'site':'stackoverflow.com'
}
Этот JSON — DTO. Теперь давайте сделаем GET
{
'error':false,
'results':2,
'data': [{'name':'john','foo':'bar','site':'stackoverflow.com'},
{'name':'mark','foo':'bar','site':'notstackoverflow.com'}]
}
массив ‘data’ является массивом DTO.
Итак, что говорит вам dox, так это то, что вам нужно познакомить ваше приложение с API, создав слой, через который эти данные будут проходить, чтобы быть сформированным в объекты на вашей стороне, и тот же слой должен взять объект и превратить его в DTO , В некоторых случаях вы можете просто обработать ответы от API с помощью простого кода, однако в ситуации, когда запрос GET вернет более 10 результатов, вы захотите проанализировать его с некоторым классом. По сути, создание ORM для DTO.
Что касается жадности: настройте тело на результаты перетаскивания данных через слой.
public function createUserWithSomeApi()
{
$g= new \Guzzle\Client();
$response = $g->post('http://api.some.place/v1/users', [
'body' => (new strangeApiDtoParser)->prepare($new_user_data)
]);
return ApiDtoParser::fromDTO($response->getBody());
}
И получить
public function getUsersFromSomeApi()
{
$g= new \Guzzle\Client();
$response = $g->get('http://api.some.place/v1/users', [
'query' => ['foo' => 'bar']
]);
return ApiDtoParser::fromDTO($response->getBody());
}
Теперь ваш парсер:
class ApiDtoParser
{
public static function fromDto($raw)
{
$returnArray=[];
$decoded =json_decode($data,true);
foreach($decoded as $one){
$obj = new DtoObj;
foreach ($one as $key => $value) {
$meth = "set". ucfirst(strtolower($key));
$obj->{$meth}($var);
}
$returnArray[]=$obj;
}
return $returnArray;
}
}
Судя по контексту вашей выдержки, вам нужно будет создать парсер на основе запросов, хотя
Других решений пока нет …