Как использовать DTO для использования REST API в PHP?

У меня есть 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? Или занятия? Как бы это сериализовать?

Жадные Документы

4

Решение

Без документации 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;
}
}

Судя по контексту вашей выдержки, вам нужно будет создать парсер на основе запросов, хотя

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]