我開始學習REST(用於我自己的項目),並同時嘗試使用Philips Hue API。我發現了一個奇怪的IMO效應:打開燈,我需要PUT
{"on": true}
至/api/<KEY>/lights/6/state
。燈狀態可以通過GET
在/api/<KEY>/lights/6/
上檢索到,並且我接收例如PUT的REST端點應該是GETable嗎?
{
"state": {
"on": true,
"bri": 113,
"alert": "none",
"reachable": true
},
"type": "Dimmable light",
"name": "Light 6",
"modelid": "LWB006",
"manufacturername": "Philips",
"uniqueid": "00:17:89:01:11:57:da:8d-0b",
"swversion": "5.38.1.15095"
}
但是我無法從/api/<KEY>/lights/6/state
GET
什麼:
[
{
"error": {
"type": 3,
"address": "/lights/6/state",
"description": "resource, /lights/6/state, not available"
}
}
]
我不知道我其實看它的任何地方,但感覺我從閱讀REST許多不同的文本有告訴我,如果我可以PUT
/api/endpoint
,我應該也可以GET
回來。因此,如果我設計了API,它可能是PUT
{"state": {"on": true}}
在/lights/6
或GET
/lights/6/state
將返回{"on": true}
。
對此有什麼普遍的一致意見嗎?
UPDATE:正如所提到的,我沒有真正引用任何東西。試圖找到現在的參考,我設法找到a popular tutorial,這似乎開始對我錯了:
PUT-用於創建一個新的資源。
POST - 用於更新現有資源或創建新資源。
我相信所有其他資源,例如this和this,明確表示POST不應該用於更新。
但是一般來說,REST基於標識「資源」的URL。因此,如果我可以將數據放入資源,我也應該能夠從該資源獲取數據。我無法在任何地方發現它,但是資源的概念是否意味着它呢?
是的,你錯了。我建議通過REST的基礎知識。如果GET在服務端聲明爲GET,並且與其他方法(PUT,POST,DELETE)相同,則GET只會給出結果。沒有協議,因此使用相同的URI可以執行GET和PUT .. – Rohit
@Rohit,你真的很快:)你可以將你的評論轉換爲答案嗎? – texnic