2013-10-31 86 views
-1

我正在製作一個API來允許其他人將我們的服務集成到他們自己的系統中。我的API響應足夠好嗎?

尋找要制定響應的最好方式是不容易的 - 我見過做的這麼多不同的方式。很多時候它做得很差,我和其他人很難使用它。

這是多麼我已經做到了:

<xml> 
    <HttpResponse>200</HttpResponse> 
    <data> 
     <report> 
      <id>200</id> 
      <date>07.03.2013 11:13:00</date> 
      <title>Fake report 1</title> 
      <content>Lorem ipsum dolor sit amet.</content> 
     </report> 
     <report> 
      <id>448</id> 
      <date>10.04.2013 12:13:34</date> 
      <title>Fake report 2</title> 
      <content>Lorem ipsum dolor sit amet.</content> 
     </report> 
     <report> 
      <id>927</id> 
      <date>25.10.2013 11:49:34</date> 
      <title>Fake report 3</title> 
      <content>Lorem ipsum dolor sit amet.</content> 
     </report> 
    </data> 
</xml> 

如果有錯誤,那麼HttpResponse對象將得到正確的代碼,以突出這一點,該數據將包含錯誤的descprition,這樣:

<xml> 
    <HttpResponse>418</HttpResponse> 
    <data> 
     <error> 
      <code>AB43</code> /* <<-- this code says what I can search for in the code to find the exact process/line where it failed */ 
      <description>You are the one who messed up!!!</description> 
     </error> 
    </data> 
</xml> 

我的問題很簡單:這個回答有什麼意義嗎?

是否有我沒有考慮到一個情況?

將有問題的人,從這樣的響應中獲得數據?

我還能怎麼辦呢?

BTW:我不會用JSON,討論結束!

+3

我會將錯誤節點移動到根級別,而不是在數據節點下。所以你要麼得到一個錯誤或數據。在我看來,它更易於理解和檢查。 而我會使用JSON ;-) –

+0

@RotemHermon JSON在冗長的一面有很多意義。最終,這兩種技術都是爲非常相似的目標而設計的。功能上,沒有什麼區別。 – Gusdor

+1

除了代碼和描述之外,還要爲錯誤添加一個名稱,比如「index out of bounds」,它是常量,並且可以用字符串相等性進行檢查。然後在描述中,添加可以改變的細節,並且因此可以不用字符串相等來檢查,例如, 「最高允許指數爲35,但供應指數爲37」。這將使得最終必須處理錯誤的代碼更容易讀取和寫入。 –

回答

0

根據評論顯示錯誤的新方法。

我不想動了錯誤和替換「數據」,是因爲我想保留有多個錯誤的可能性。相反,我將「數據」更改爲「錯誤」。

<xml> 
    <HttpResponse>418</HttpResponse> 
    <errors> 
     <error> 
      <code>AB43</code> 
      <title>document_title_too_long</title> 
      <description>The title is limited to 64 characters, yours was 73. </description> 
     </error> 
     <error> 
      <code>AC85</code> 
      <title>document_no_category</title> 
      <description>You must select a category to save the document. </description> 
     </error> 
    </errors> 
</xml>