401的回答對我來說似乎是合理的。 HTTP認證機制是可擴展的,因此您可以想象創建一個自定義認證方案,以便您按照RFC的要求正確設置WWW-Authenticate標頭。瀏覽器不知道如何處理您的自定義方案,但我假設您的客戶不是瀏覽器,如果他們必須瞭解義務是什麼。
實施例請求序列:
PUT /some/resource/that/has/obligations HTTP/1.1
Content-Type: application/json
Authorization: token my-oauth-token
HTTP/1.1 401 Unauthorized
WWW-Authenticate: obligation urn:my-app:my-obligation;param1;param2
PUT /some/resource/that/has/obligations HTTP/1.1
Content-Type: application/json
Authorization: token my-oauth-token
Authorization: obligation urn:my-app:my-obligation:result=ok
HTTP/1.1 201 Created
Location: /some/resource/that/has/obligations/1
另一種選擇是對初始後返回202或放,並且t母雞在稍後的帖子中確認。這個選項需要更多的狀態管理服務器端,因爲你首先接受這個操作,然後等待客戶端確認它。
PUT /some/resource/that/has/obligations HTTP/1.1
Content-Type: application/json
Authorization: token my-oauth-token
HTTP/1.1 202 Accepted
Location: /some/resource/that/has/obligations/1
X-Obligation: urn:my-app:my-obligation;param1;param2
POST /some/resource/that/has/obligations/1 HTTP/1.1
Content-Type: application/json
Authorization: token my-oauth-token
X-Obligation: urn:my-app:my-obligation;result=ok
HTTP/1.1 200 OK
有一兩件事要始終牢記與義務,但...他們總是強迫客戶端,因此,除非該義務涉及到另一項服務,您的服務可以複覈,您永遠不知道是否e客戶實際上履行了義務。如果你不控制客戶,那麼義務真的只是戲劇。
401保留用於HTTP身份驗證(請參閱) –