我有一个API用于为二手车提供融资报价的服务。我的应用程序是用PHP编写的,我通过Composer添加了Guzzle 5.
我之前使用过其他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”之类的东西。你会在PHP中使用StdClass或Arrays吗?还是上课?我该如何序列化?
答案 0 :(得分:1)
如果没有API的文档,这很难表达。但我会尝试。我们将使用基于JSON的通用REST API
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'}]
}
数据阵列'是一个DTO数组。
所以dox告诉你的是,你需要熟悉你的应用程序与API,通过创建一个层来传递数据以形成你身边的对象,同一层应该拿一个对象然后转动它进入DTO。在某些情况下,您可以使用简单的代码处理来自API的响应,但是在某种情况下,GET请求将返回超过10个您想要用某个类解析它的结果。基本上为DTO创建ORM。
就guzzle而言:将身体设置为通过图层推送数据的结果。
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;
}
}
根据您摘录的上下文判断,您需要创建基于请求的解析器