不RESTful的
不,你的做法是不是平安,因爲如果我理解的工作流程,你會刪除該資源以停止測量,然後獲取資源,以讀出最後的結果。但刪除資源意味着將沒有任何東西留給GET
。
,你的資源是一個單身是不是在所有問題的事實。問題在於你如何映射動詞和狀態。
你的描述有點抽象,所以讓我們更具體一點:假設有問題的儀器測量弧度/秒飛輪的角速度。該儀器具有與測量相關的一些成本,因此客戶需要能夠在一段時間內禁用測量作爲節約成本的措施。如果這與您的方案大致類似,那麼下面的說明應適用於您的方案。
動詞
現在讓我們來看看你的動詞。
GET
返回資源的表示。所以當你GET /measure
,它應該返回一些代表當前測量的數據。
PUT
創建或更新一個特定的,命名資源。資源通過其URL來命名。因此PUT /measure
意味着您正在更新名爲/measure
的資源的狀態,或者如果該資源尚不存在,則創建該資源。在你的情況下,儀器值是隻讀的:我們不能爲儀器寫入弧度/秒的值。但該儀器的暫停/活性狀態是可變的,所以應該PUT /measure
包括主體修改該儀器的狀態。您可以在這裏使用很多不同的表示形式,但一個簡單的方法是請求機構,如active=true
或active=false
來指示該儀器的新狀態應該是什麼。
POST
與PUT
類似,只是客戶端沒有指定應該創建或更新的資源的名稱。例如,在不同的API中,客戶端可能會使用POST /articles
來創建新的文章。服務器將創建一個資源,並給它像/articles/1234
一個名稱,然後它會返回一個HTTP 201 CREATED
代碼並添加Location: /articles/1234
頭告訴客戶端在新的資源是講述這個新名字的客戶機。在你的場景中,POST
不是一個有意義的動詞,因爲你總是知道你的單身資源的名字是什麼。
DELETE
表示您刪除資源,並且由於資源由URL標識,因此DELETE /measure
意味着/measure
不再存在。後續GET /measure
應返回404 NOT FOUND
或410 GONE
。在你的情況下,客戶端實際上不能銷燬該樂器,所以DELETE
不是有意義的動詞。
結論
所以總和,爲您服務REST風格的設計將有PUT /measure
與請求主體,告訴儀表是否應進行或不活動(暫停)和GET /measure
讀取電流測量。如果您在暫停的樂器上使用GET /measure
,則應該返回409 CONFLICT
HTTP狀態。您的服務根本不應使用POST
或DELETE
。
在我看來屬於http://programmers.stackexchange.com,因爲它更像是一個設計問題。 – Romain