2015-01-08 47 views
4

我有一個API用於提供二手車財務報價的服務。我的應用程序是用PHP編寫的,我通過Composer添加了Guzzle 5。如何使用DTO在PHP中使用REST API?

我已經使用過其他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. 

所以我不知道如何與狂飲來實現這一目標。一些枚舉類型是諸如「RequestAssetMotorVehicle」之類的東西。你會使用StdClass或Arrays在PHP中執行此操作嗎?還是上課?我會如何連載它?

Guzzle Docs

+0

我們能否有一個鏈接到API的文檔?或者可能是工作要求的轉儲? –

回答

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'}] 
} 

'data'數組是一個DTO數組。

因此,dox告訴你的是,你需要通過創建一個數據層來讓你的應用程序熟悉API,以便通過這些數據形成你的一側的對象,同一層應該接受一個對象並轉向它變成了一個DTO。在某些情況下,您可以使用簡單的代碼處理來自API的響應,但是在某些情況下,GET請求會返回超過10個結果,您將要使用某些類來解析它。基本上爲DTO創建一個ORM。

只要唾手可得:將主體設置爲通過圖層推送數據的結果。

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; 
    } 
} 

由你摘抄的背景下來看,你需要創建一個基於請求剖析儘管