2012-03-19 133 views
24

我目前正在構建一個REST API。所有GET方法當前都使用JSON作爲響應格式。 POST和PUT操作的最佳做​​法是什麼?在請求正文或純POST中使用JSON?我無法找到關於此事的任何事情。REST API:請求正文爲JSON還是普通POST數據?

我看到Twitter使用POST例如: https://dev.twitter.com/docs/api/1/post/direct_messages/new

什麼是使用JSON格式的好處是什麼?我從github獲得的API控制器(已經完成了一半)期望JSON。真的想知道爲什麼我會選擇使用它。

回答

49

POST,PUT,GET都是HTTP動詞,本身並不表示傳輸數據的格式,所以沒有POST格式。這意味着您可以按照您選擇的任何方式對數據進行編碼。

現在,你決定採用什麼格式應該真的是更關心你的API如何被使用。如果它主要是從Web瀏覽器提交表單提交,那麼使用表單字段編碼可能是最合理的做法,因爲它使得客戶端的交互更加容易。另一方面,如果您主要是從AJAX調用接收JSON數據,那麼接收JSON格式可能是有意義的。如果你同時做這兩件事,那麼沒有任何理由不能接受格式的數據格式。

要考慮的另一個方面是數據結構的複雜性,您將來回傳遞數據結構。表單編碼(類似於查詢字符串編碼)是一種鍵值結構,而JSON(或XML)允許更豐富的數據結構。最後,在服務器端以及客戶端(因爲我假設你也將編寫相關API的主要客戶端消費者)這兩者中的任何一個都是最簡單的。簡單是總是首選複雜,直到你可以明確表明更復雜給你一個可衡量的好處。

另外,我會提到的最後一件事是REST不僅僅是乾淨的URL或正確使用HTTP動詞。這些方面真的只是錦上添花。 REST架構的核心思想是:Hypertext is the engine of application state。通過簡單地跟蹤服務器響應中的URL,一個好的客戶可以瞭解所有可用的操作,並且除了基本URL之外不需要知道任何其他信息。其他一切都可以從中發現。再加上定義明確的內容類型,你有一個世界,許多客戶可以與很多服務器進行通信,所有的語言都是相同的,客戶不需要知道什麼關於服務器(或副 - 除了基本URL和內容類型以外)。這就是REST的全部內容。

+0

我想不出比這更明確的答案。我會考慮最容易出現的情況。由於本機JavaScript兼容性可能會導致JSON。感謝您的時間! – mauserrifle 2012-03-19 18:36:59

4

這取決於你想交換的數據。如果它是一個複雜的結構,您需要以結構化的方式發送它(例如XML或JSON)。在java web應用程序中,json更加輕量,所以它比XML更受歡迎。

如果你想發送表單中的幾個字段,「application/x-www-urlformencoded」類型也可以使用。