假設您在REST API中有一個複雜的資源。您在此資源上有幾個一對多標誌和屬性(即用戶可能已給予該資源的評分爲1至5或用戶可能已'喜歡'該資源或將其標記爲垃圾郵件或將其忽略或引起一些其他國家將被設置)。在REST API中處理標誌和屬性的選項有哪些?
對於以資源爲中心的體系結構來表示這一點的最佳方式提出了一些建議,但到目前爲止,沒有一個能夠讓我真正感到高興。所以讓我們來分析一下這個問題。你發現哪些變體最容易理解?我們沒有想到哪些變體?假設一個基於OAuth的API和這裏的所有內容都是在當前授權用戶的上下文中完成的。
布爾標誌
變型1:
GET /resource/{id}/muted POST /resource/{id}/muted BODY:true POST /resource/{id}/muted BODY:false
變體2:
GET /resource/{id}/muted PUT /resource/{id}/muted BODY:true DELETE /resource/{id}/muted
變體3:
GET /resource/{id}/attributes POST /resource/{id}/attributes BODY:muted=true POST /resource/{id}/attributes BODY:muted=false
變體4:
GET /resource/{id}/muted POST /resource/{id}/mute POST /resource/{id}/unmute
屬性
變體1
GET /resource/{id}/rating POST /resource/{id}/rating BODY:4
變體2:
GET /resource/{id}/rating PUT /resource/{id}/rating BODY:4 DELETE /resource/{id}/rating
變3:
GET /resource/{id}/attributes POST /resource/{id}/attributes BODY:rating=4 POST /resource/{id}/attributes BODY:rating=
的思考?建議?其他API如何處理?你是怎麼處理它的?您是否發現這樣的設計問題對開發人員的幸福感或API的易用性有重大影響?
那麼,這實際上是變種3,但與「application/json」有效載荷,而不是「應用程序/ x-www-form-urlencoded」有效載荷。相同的基本思想,但'application/x-www-form-urlencoded'更適合部分更新資源。 – 2010-11-02 06:59:20
另外,因爲一切都在OAuth後面,所以緩存參數比平常弱一些。接收端的客戶端可以緩存,並且肯定該緩存在更大的資源下效率更高。然而,從開發人員的角度來看,95 +%一次只會改變一個屬性,並且不會假定發送給服務器的數據主體將與您在收到時立即產生GET一致。這可能會消除'PUT'作爲一個選項,擴展名'DELETE'。我對此很滿意,因爲那是我最不喜歡的解決方案。 – 2010-11-02 07:03:24
至於緩存失效,說相關應用程序只能最大限度地減少這個問題,而不是消除它是非常安全的。這就是生活的規模。 – 2010-11-02 07:10:10