当前位置: 首页 > 知识库问答 >
问题:

查询多个属性的正确REST表示法是什么

杜俭
2023-03-14

有一个实体,

class Employee{
  int id;
  String name;
  String phoneNumber;
}

查询以下4种场景的正确REST-ful方式是什么:

  1. 所有员工名单
  2. 具有给定ID的员工
  3. 具有给定ID和姓名的员工
  4. 具有给定ID、姓名和电话号码的员工

两个起跑点非常直截了当:

1. /employee
2. /employee/{employee-id}

然而,现在我们想要根据多个属性筛选实体,我能想到的最佳解决方案是:

3. /employee/{employee-id}?name=abc
4. /employee/{employee-id}?name=abc&phoneNumber=123

有没有更好的方法来做到这一点?有些人提出了如下解决方案:

3. /employee/{employee-id}/{name}
4. /employee/{employee-id}/{name}/{phoneNumber}

然而,我觉得以上这些违背了宁静的表达方式。

共有2个答案

王飞虎
2023-03-14

按ID和姓名(以及电话号码)搜索员工有点矛盾。

通常,按ID查找员工不被视为搜索,而是对现有资源的引用(GET请求)。如果失败,应该返回HTTP 404。

按多个属性搜索通常是查询的POST,例如:

POST /employee/search HTTP/1.1

Name=Hasan&PhoneNumber=0612345678

混合按ID查找和按(多)属性搜索会引发一些问题:

  • 是否只返回与所有属性匹配的结果
刘令
2023-03-14

在RESTAPI中,必须将集合和特定资源分开。我会用复数形式指定一个集合,用单数形式指定资源。因此,集合中的特定资源可以通过/{collectionName}/{id}获取,如果要查询属性,请使用/{collectionName}?属性1=qwe

所以我宁愿这样构造它:

/employees                             # the entire collection of employees
/employees/{id}                        # a specific employee by id. No need to have any query params since we fetch an employee by its primary key.
/employees?name=abc&phoneNumber=123    # query the collection of employees for the ones having name=abc and phoneNumber=123
 类似资料:
  • 问题内容: 文本框或文本区域的属性的正确值是多少? 我以前看过以下内容: 问题答案: 对于XHTML,是有效的标记。 对于HTML5,W3C对其样本有效并使用了它们。 实际上,两种方法都可以在所有主要浏览器上使用。

  • 我已经做了几个小时没有成功。对于我从这里记录的其他事件或其他地方的示例中尝试的所有内容,HQL语法在我的方法中似乎总是错误的: 每次Hibernate都会给我一条信息: 使用如下所示的查询: 堆栈跟踪为:

  • 我正在尝试向gremlin顶点添加多个属性。每次我都有不同数量的属性和不同的属性,所以我需要根据Map使查询动态以创建或更新属性。我发现了这个gremlin python-将多个但未知数量的属性添加到顶点,并尝试做同样的事情,但我实例化了一个jansugraph,但我得到了一个错误。任何想法都将非常受欢迎。 下面是直接用gremlin控制台写的,然后我会翻译成java代码。 而我得到的错误是 任何

  • 我正在尝试将“{”文本“:”添加到字符串的开头,将“}”添加到字符串的结尾。 我一直在环顾四周,玩下面不同版本的游戏 甚至可以附加到扩展属性吗? 给我试图实现的目标添加更多信息 空的传递给

  • 问题内容: 在UML图上,代表模板类的正确方法是什么? 问题答案: 在右上角带有虚线矩形的普通矩形,代表模板参数。像这样:

  • 以下是mongodb中的集合 当我询问 MongoDB返回结果集中具有"拥有":"笔记本电脑"的文档。 当我询问 结果仅显示数据字段中第一个匹配“TV”的文档 我如何查询获得汤姆拥有电视的所有3个文档,不包括笔记本电脑文档。预期结果 注意:在本例中,我只提到了数据字段中的4个文档,其中原始集合有50多个文档。对不起,我的英语很差:)。