路径变量还是请求参数?

Path Variable or Request parameter?

我们在设计Rest api时说,需要识别资源时使用Path Variable,需要进行排序、过滤、搜索等操作时使用Request Parameters , 页码。让我们以 Employee:

为例

员工有 namecompanyNamesocialSecurityNo 等三个字段。

现在我想要一个 socialSecurityNo = ABC.

的员工

端点的路径变量如 /employees/{socialSecurtityNo} 似乎很好,因为我们正在识别资源。

我们在 socialSecurityNo 的基础上进行过滤,并且有一个像 /employees?socialSecurityNo=ABC

这样的端点,这似乎很直观

什么是正确的方法,因为我很困惑,认为两者都适用。

这是个好问题。

/employees?socialSecurityNo=ABC

正在过滤 socialSecurityNo 上的所有员工。如果 socialSecurityNo 对员工来说是唯一的,那么这个端点就没有意义了,客户端应该使用 /employees/{socialSecurtityNo}.

过滤唯一字段值 (socialSecurtityNo) 没有任何问题,如果客户发现使用此版本更容易(无论出于何种技术原因),那很好。没有 'right' 方法。 API 存在的最终原因是允许客户完成有价值的工作。与客户合作,让这种情况发生,但牢记最佳实践,并了解何时解决方案不是最好的,但在这种情况下是最实用的。

我希望看到:

/employees?surname=Smith

因为这是在非唯一字段值上过滤,应该 return Employee 个对象的集合。

'right' 要做的就是保持结果一致。如果您有两种查找员工的方法,请确保 returned 结果在每种情况下都相同。