WebAPI 仅用于数据交换?
WebAPI only for data-exchange?
我的意图是为 IoT 设备创建 WebAPI。它应该给我有关硬件端口、设备状态等的信息。我现在的问题是,可以用它来控制某些端口吗?例如,连接到 IoT 设备输出的 LED 将被控制为 [GET] /api/led/{id}/on
要么
[GET] /api/led/{id}/off
这会与 WebAPI 的实际含义相矛盾吗?
是的 - 这不是一个很好的结构,因为 GET 方法应该是 idempotent 和 safe - 参见 http://restcookbook.com/HTTP%20Methods/idempotency/ 以获得更详细的定义,但实际上 安全 的意思是 GET 请求不应修改状态或数据。
所以:
GET /api/led/{id}/on
应该 return 表示它是打开还是关闭,但实际上不应该修改 LED 的状态。如果打开它可以 return 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 技术,但根据您的上下文中的标准 terminology/semantics,消费者可能或多或少地清楚其中一些技术。
我的意图是为 IoT 设备创建 WebAPI。它应该给我有关硬件端口、设备状态等的信息。我现在的问题是,可以用它来控制某些端口吗?例如,连接到 IoT 设备输出的 LED 将被控制为 [GET] /api/led/{id}/on 要么 [GET] /api/led/{id}/off
这会与 WebAPI 的实际含义相矛盾吗?
是的 - 这不是一个很好的结构,因为 GET 方法应该是 idempotent 和 safe - 参见 http://restcookbook.com/HTTP%20Methods/idempotency/ 以获得更详细的定义,但实际上 安全 的意思是 GET 请求不应修改状态或数据。
所以:
GET /api/led/{id}/on
应该 return 表示它是打开还是关闭,但实际上不应该修改 LED 的状态。如果打开它可以 return 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 技术,但根据您的上下文中的标准 terminology/semantics,消费者可能或多或少地清楚其中一些技术。