2013-11-03 50 views
3

在Play應用程式我設計,這些都是我的一些路線如何在REST API中定義編輯頁面?

POST /visits      controllers.Visit.create 
GET  /visits      controllers.Visit.visits 
GET  /visits/:id     controllers.Visit.visit(id: Long) 
PUT  /visits/:id     controllers.Visit.update(id: Long) 
DELETE /visits/:id     controllers.Visit.delete(id: Long) 

我支持瀏覽器界面太。我遵循我在此處看到的指導: RESTful on Play! framework

我可以輕鬆提供HTML模板以顯示有關特定訪問或訪問列表的詳細信息。但是,一個「編輯頁面」是如何徹底落實到這個過程中的,這個過程必須預先填寫來自特定訪問的信息?我可以很容易地做這樣的事情:GET /visits/:id/edit controllers.Visit.edit(id: Long)這將返回一個預填充頁面的訪問信息,或者我可以有一個靜態HTML頁面調用/visits/:id AJAX調用填充字段,這將讓我避免腐敗我的資源 - 使用瀏覽器頁面特定的路線驅動API。或者有更好的選擇嗎?什麼是最佳實踐,爲什麼?

回答

2

在REST中,僅僅爲了執行標準化操作而創建額外的資源是沒有意義的。每個瞭解HTTP協議的人都知道,您的訪問對象應該可以通過PATCH請求進行編輯,並且需要應用diff,或者通過PUT請求來替換整個資源。爲什麼要用POST創建一個自定義和非標準的編輯動作,你必須記錄並向大家解釋它的工作原理?

從這個意義上說,我認爲你最好的選擇是使用靜態HTML頁面來驅動你的API,使用GET on/visits /:id填充字段,並使用編輯後的內容替換/訪問/ :提交時使用PUT編號。

但是請記住,只要您尊重客戶端發送的Accept報頭,在API中使用瀏覽器頁面特定的路由沒有任何問題。在我的API上,當使用Accept:text/html頭進行請求時,我有時候會有一些路由返回人性化的資源表示,所以這是一種簡單的方法來創建內置的管理客戶端,並且可以輕鬆地使用API一個瀏覽器。在REST中,API和WEB頁面之間的唯一區別在於第一個以機器友好的格式返回表示,第二個表示您希望由瀏覽器在人性化的文檔中呈現。他們都應該有關於如何編輯資源的鏈接和/或表單。

+0

真棒解釋。還有一個問題。您建議使用AJAX GET來填充我的標準API的字段,但是您建議可以使用瀏覽器頁面特定的路由。瀏覽器頁面特定的路線將允許我避免額外的客戶端 - 服務器查詢,返回預先填充的頁面。爲什麼我不想這樣做?在靜態頁面加載之後,有沒有用AJAX完成GET的任何爭論?我認爲靜態頁面緩存將是一個巨大的勝利,做一個瀏覽器頁面路由將是最好的...簡單的非面向用戶的管理頁面,就像你所描述的。沒有? – sdanzig

+0

帶有AJAX的靜態文檔充當您的API的客戶端,而不是API資源,如果您不小心將其與特定服務耦合得太多,則可以將其重用爲所有API的UI。例如,檢查HAL瀏覽器。 https://api-sandbox.foxycart.com/hal-browser/hal_browser.html#/。這只是一個靜態HTML,您可以將它放在由HAL驅動的任何RESTful API上,並且它可以用作整個API的瀏覽器。 –

相關問題