【发布时间】:2016-09-15 00:35:02
【问题描述】:
我开始学习 REST(针对我自己的项目),同时尝试使用 Philips Hue API。我发现了一个奇怪的 IMO 效应:要打开灯,我需要 PUT {"on": true} 到 /api/<KEY>/lights/6/state。可以在/api/<KEY>/lights/6/ 上使用GET 检索灯光状态,我会收到例如
{
"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"
}
但是我不能GET 来自/api/<KEY>/lights/6/state 的任何东西:
[
{
"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}。
对此有什么普遍共识吗?
更新:正如正确地提到的,我实际上并没有引用任何东西。现在尝试查找参考资料,我设法找到了a popular tutorial,这对我来说似乎开始完全错误:
PUT - 用于创建新资源。
POST - 用于更新现有资源或创建新资源。
我相信所有其他资源,例如this 和 this,很清楚不应该使用 POST 来更新。
但总的来说,REST 是基于标识“资源”的 URL。因此,如果我可以将数据放入资源中,我也应该能够从该资源中获取数据。我在任何地方都找不到明确写的,但是资源的概念是否暗示了它?
【问题讨论】:
-
是的,你错了。我建议阅读 REST 的基础知识。只有在服务端将 GET 声明为 GET 并且与其他方法相同 - PUT 、POST 、 DELETE .. GET 才会给您结果
-
@Rohit,你真的很快 :) 你能把你的评论转换成答案吗?
标签: rest philips-hue