經過多年的網絡編程後,我現在開始從頭開始編寫新的Web應用程序。我學習了REST的一些技巧,並發現了一些有關好的和不好的「URI風格」的helfful演示和網絡研討會。但是,所有這些教程似乎都假設只有可以映射到數據庫中存在的實體的資源。如果需要GET
一個HTML(用戶友好)版本的東西,那麼普遍的答案是通過HTTP頭字段使用內容negiotation。最終目標似乎只有遵循REST範式的URI。REST API和UI網頁的URI模式的最佳實踐
但是,顯示無法映射到實體但仍然需要的網頁的「正確」方式是什麼?
也許我舉個例子來說明我的意思。假設我們有一個集合Persons
和實體Person
。
然後我們有
POST /Persons/
到集合DELETE /Person/{id}/
刪除的人PUT /Person/{id}/
到modifiy的人(是的,我知道這也意味着創建一個在創建新的聯繫人)GET /Persons/
得到所有人的名單GET /Person/{id}/
得到一個人- 等
關於GET
操作我通常會發現,使用請求的Accept
和X-Requested-With
報頭字段來創建響應,要麼在計算機返回「裸露」的人對象的建議可讀代表(即JSON,XML等),或者爲瀏覽器返回完整的網頁。
但是什麼是PUT
操作。最終,此操作將發送將要創建的裸人對象(即JSON,XLM),但在此步驟之前,我需要從用戶那裏收集數據。這意味着我需要一些空白的網頁表單,這對於用戶來說只是「眼睛」。當然,我可以忍受像GET /newPersonForm/
這樣的東西,但是這似乎與REST哲學相矛盾,因爲/newPersonForm/
是一個只指向某個用戶界面元素的URI。
目前我看到的選項:
使用相同的名稱空間都種的URI:
POST /Persons/
- > REST APIDELETE /Person/{id}/
- > REST apiPUT /Persons/{id}/
- > REST apiGET /Persons/
- > REST API或UI(後內容negiotation)GET /Person/{id}/
- > REST API或UI(後內容negiotation)GET /Person/creationForm
- >非REST,純UIGET /aboutus
- >非-REST,純粹的UI,更多的公司信息
進行單獨的命名空間:
/api/...
- >包含家居REST/ui/...
- >包含HTML網頁
第一個方法我覺得這是somebit 「不乾淨」。雖然第二種方法看起來更清潔,但我看到兩個問題。首先,如果採用這種方法乾淨利落,可以獲得更多的雙重URI,因爲不需要內容負擔,並且每個REST功能都有一個UI網頁。我有GET /api/Person/{id}/
返回一個JSON對象,GET /ui/Person/{id}
返回瀏覽器版本。其次,我覺得這種方法與REST哲學相矛盾,因爲搜索範例和網絡爬蟲不能理解網站的結構。
任何建議最佳實踐是什麼?
我閱讀了這兩個鏈接。但是我沒有找到我使用錯誤的HTTP方法映射到CRUD操作的地方。對我來說唯一的新信息是PUSH可以用作任何事情的「後備」方法,因爲它沒有預定義的標準化語義。無論如何,我決定去選項1,以避免過多的雙重URI,並將使用「GET/person/new」來獲得一個空的表單。它最好匹配「GET/person/{id}」,它返回相同的表單,但與用戶數據。 – user2690527 2014-10-31 21:33:42