设计REST API以在单个查询字符串中接受多个复合标识符

时间:2017-01-12 18:34:53

标签: rest api get

我需要设计一个API端点,它接受GET请求的复合标识符列表

假设标识符是这两个属性的组合:

  • type - int - 可以关联多个ID
  • id - int - 可以属于多种类型

并且假设客户想要查询以下项目:

  • type 10,id 99
  • type 10,id 98
  • type 11,id 89
  • type 12,id 79

设计此标准的标准方法是什么

我一直在考虑的一些选择

  1. 单个查询字符串参数,其中type:id应按明确顺序

    • /endpoint?typeid=10:99&typeid=10:98&typeid=11:89&typeid=12:79
  2. 单个查询字符串参数,为复合

    的每个部分显式调出args
    • /endpoint?q=type:10+id:99&q=type:10+id:98&q=type:11+id:89&q=type:12+id:79
  3. 与2相同,但以逗号分隔

    • /endpoint?q=type:10+id:99,type:10+id:98,type:11+id:89,type:12+id:79

1 个答案:

答案 0 :(得分:1)

使用查询参数是请求对实体进行服务器端过滤的“标准”方式。

参数格式真的取决于你,基本上,没有一个选项是错误的。由于REST是关于统一接口的,因此您可以推断出简单性和非模糊性是可取的。因此,你应该更喜欢更简单明了的东西。

在您的选项中,我会使用数字1,但这是基于参数名称的个人偏好(它带有更多“语义”)。

您当然知道,当您需要执行非常复杂的过滤时,查询参数并不总是很好。另一个方法是设计一个“filterRequest”资源并使用POST与它进行交互。

操作意义是:

  1. 我向服务器提交过滤请求(比方说,我打开一张票:“请给我符合我标准的资源”)
  2. 服务器处理请求并返回我想要的列表
  3. 如果您计划添加更多过滤选项(这样可以增强可扩展性和重用性),也许这个选择是值得的。相反,你会发现自己正在努力克服往往变得难以理解的查询。