WebAPI仅用于数据交换?

时间:2016-10-06 17:15:58

标签: rest asp.net-web-api iot restful-architecture

我的目的是为物联网设备创建一个WebAPI。它应该给我关于硬件端口,设备状态等的信息。我现在的问题是,可以用它来控制一些端口。例如,连接到物联网设备输出的LED将被控制为[GET] / api / led / {id} / on 要么 [GET] / api / led / {id} / off

这会否与WebAPI的实际含义相矛盾?

1 个答案:

答案 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

并制作正文truefalse,或可能{"on":true}{"on":false}

或可能

POST /api/led/{id}/on

将其打开并

POST /api/led/{id}/off

将其关闭。

以上所有内容都是有效的WebApi / REST技术,但根据您上下文中的标准术语/语义,某些内容可能或多或少对消费者来说很清楚。