RESTful API设计使用相同的HTTP方法区分相同URI上的操作

时间:2015-09-05 11:41:53

标签: rest http web interface

我想设计一个RESTful API,以便通过Web界面控制蓝牙适配器。

如果我发生以下冲突会怎样?

POST /IDofDongle/

让我们说我希望这个特定的USB加密狗能够启动发现/查询过程(将有关周围蓝牙设备的信息附加到资源)或连接到任何蓝牙设备(通过附加MAC创建新的从属资源)蓝牙设备到上面的URI的地址)?

使用QueryString区分对我来说似乎非常像RPC。 或者我是否需要定义其他资源?

1 个答案:

答案 0 :(得分:1)

你遇到了REST谬误。并非所有东西都是资源,所以你不应该试图对待所有东西。通过POSTint到该端点,您说要创建USB加密狗。由于您没有访问3D打印机,这将无法正常工作。您正在构建RPC服务。

所以打破REST并介绍你自己的动词:

POST /IDofDongle/Discover
POST /IDofDongle/Connect

当然,您可以将“发现”和“联系”视为资源:

POST /IDofDongle/Discoveries
POST /IDofDongle/Connections

“创建”这些实体。然后,您可以返回与指定加密狗相关的发现或连接实体,并保留此类实体的相关属性(DiscoveredDevices,ConnectionID,...)。