WebAPI 仅用于数据交换?

WebAPI only for data-exchange?

我的意图是为 IoT 设备创建 WebAPI。它应该给我有关硬件端口、设备状态等的信息。我现在的问题是,可以用它来控制某些端口吗?例如,连接到 IoT 设备输出的 LED 将被控制为 [GET] /api/led/{id}/on 要么 [GET] /api/led/{id}/off

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

是的 - 这不是一个很好的结构,因为 GET 方法应该是 idempotentsafe - 参见 http://restcookbook.com/HTTP%20Methods/idempotency/ 以获得更详细的定义,但实际上 安全 的意思是 GET 请求不应修改状态或数据。

所以:

GET /api/led/{id}/on

应该 return 表示它是打开还是关闭,但实际上不应该修改 LED 的状态。如果打开它可以 return 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 技术,但根据您的上下文中的标准 terminology/semantics,消费者可能或多或少地清楚其中一些技术。