我的目的是为物联网设备创建一个WebAPI。它应该给我关于硬件端口,设备状态等的信息。我现在的问题是,可以用它来控制一些端口。例如,连接到物联网设备输出的LED将被控制为[GET] / api / led / {id} / on 要么 [GET] / api / led / {id} / off
这会否与WebAPI的实际含义相矛盾?
答案 0 :(得分:1)
是的 - 这不是一个很好的结构,因为GET方法应该是幂等和安全 - 有关更详细的定义,请参阅http://restcookbook.com/HTTP%20Methods/idempotency/,但实际上说它的安全意味着GET请求不应该修改状态或数据。
所以:
GET /api/led/{id}/on
应该返回一个表示来指示它是打开还是关闭,但是不应该实际修改led的状态。它可以返回true
或{"on" : true }
如果它已经打开,false
如果它已经关闭 - 对你的应用程序有任何意义。
要打开或关闭它,您应该使用非安全的方法,所以您可以做的是:
PUT /api/led/{id}/on
并制作正文true
或false
,或可能{"on":true}
或{"on":false}
或可能
POST /api/led/{id}/on
将其打开并
POST /api/led/{id}/off
将其关闭。
以上所有内容都是有效的WebApi / REST技术,但根据您上下文中的标准术语/语义,某些内容可能或多或少对消费者来说很清楚。