2011-01-11 16 views
2

我正在爲我的web應用程序設計API,而且我們的內容相當複雜。例如,您可以擁有包含多個子對象(如標籤,多個獨立內容區域等)的wiki頁面。使用JSON作爲API請求參數的格式(爲我的web應用程序設計API)

我不想處理複雜的命名參數,如tag_N或tag []。

我還想到我們的對象可以完美地表達爲JSON。事實上,這是我們的迴應格式。如果您執行GET,您將收到JSON格式的對象。

是否有必要在JSON中指定對象的POST和PUT主體?例如,像這樣:

{ 
'name' : 'My Page', 
'body' : 'Some page body', 
'tags' : ['tag1', 'tag2', 'tag3'] 
} 

,而不是

name=My%20Page&body=Some%20page%20body&tag[]=tag1&tag[]=tag2&tag[]=tag3 

這是一個非常簡單的例子。在許多情況下,我們有複雜的對象與數組的子對象,他們本身也包含子對象。使用JSON描述相當簡單,但查詢字符串樣式參數非常困難。

所以,主要問題是:如果我們要求POST正文是一個JSON字符串,那是不合理的嗎?它超出了HTTP API的規範嗎?作爲一名API消費者的作者,您是否會因爲這樣的需求而被API拖延?

回答

1

這是JAX-RS/REST API的典型特徵。

4

這並非不合理。您可能會在這裏混合一些東西:(a)數據格式,(b)編碼和(c)REST設計原理。

一般情況下,我建議如下:

  • 的數據格式應該是一致的(例如,JSON作爲一個資源的所有CRUD方法的基礎;如果你支持的XML這將是很好的很好,因爲它的無處不在 - 很多框架會自動爲你做)

  • 編碼應該與數據傳輸格式分開;例如,URL具有與正文編碼略有不同的編碼。不要將其與數據格式混淆。

  • 建議您儘可能將資源建模爲REST-ful。在大多數情況下,使用POST進行創建,GET進行讀取,PUT進行更新,DELETE進行刪除

相關問題