在一個RESTful應用程序中,我們如何區分「動作」和HTTP動詞(GET
,POST
,PUT
,DELETE
)?在一個RESTful應用程序中,我們如何區分「動作」和HTTP動詞(GET,POST,PUT,DELETE)?
例如,據我所知,GET
請求資源/products
應該返回一個所有產品的列表。 A POST
要求/products
應該創建一個新產品。那麼,用戶如何請求用於創建產品的原始表單?我最初的迴應將是對同一個URI的GET
請求,但如上所述,這應該返回所有產品的列表 - 不是創建產品的空白表單。
在我研究過的大多數框架中,通過使URI的「action」部分解決了這個問題。例如,對/products/create
的POST
請求將創建一個新產品,而對/products/create
的GET
請求將爲創建產品提供空白表單。要獲得所有產品的列表,將根據所討論的框架向/products
或/products/get
,/products/read
等發出GET
請求。這種方法解決了上述含糊不清的問題,但與我讀到的有關傳統REST設計的內容相沖突。
'但它與我讀到的有關傳統REST設計的內容相沖突 - 爲什麼? – 2012-08-07 23:31:13
@RobertHarvey:因爲「動作」與HTTP動詞是多餘的。如果在URI中指定了一個動作,那麼你只需要兩個動詞(即'GET'和'POST')。 – FtDRbwLXw6 2012-08-07 23:34:10
在純REST環境中,您將訪問資源,而不是操作。所以,爲了讓表單創建一個新產品,你需要在/ products/form URI上發出一個GET。然後,您可能會使用Javascript將表單轉換爲JSON請求,然後您可以將其放入/產品。正如您已經指出的那樣,很少有這樣的方式,可能部分是出於方便的原因,部分原因是REST通常不會被大多數Web資源充分利用。 – 2012-08-07 23:41:28