在设计Rest
api时,据说在需要标识资源时使用Path Variable
,在需要进行排序,过滤,搜索,分页等操作时使用Request Parameters
。让我们以Employee
的情况为例:
Employee具有三个字段,例如name
,companyName
,socialSecurityNo
。
现在我想要一个拥有socialSecurityNo = ABC
的员工。
因为端点是带有/employees/{socialSecurtityNo}
之类的路径变量,这似乎很好,因为我们正在标识资源。
同样直观的是,我们在socialSecurityNo
的基础上进行过滤,并拥有一个像/employees?socialSecurityNo=ABC
这样的端点
当我感到困惑并认为两者都适用时,正确的方法是什么。
答案 0 :(得分:0)
这是一个很好的问题。
/employees?socialSecurityNo=ABC
正在过滤socialSecurityNo
上的所有员工。如果socialSecurityNo
对于员工是唯一的,则此端点中没有任何意义,客户应使用/employees/{socialSecurtityNo}
。
对唯一字段值(socialSecurtityNo
)进行过滤没有任何问题,并且如果客户发现使用此版本更容易(出于任何技术原因),那很好。没有“正确”的方法。存在API的最终原因是允许客户端进行有价值的工作。与客户合作,以允许发生这种情况,但要牢记最佳实践,并知道解决方案何时不是最佳解决方案,而是在实际情况中最实用的解决方案。
我希望看到:
/employees?surname=Smith
这是针对非唯一字段值的过滤,因此应返回Employee
个对象的集合。
要做的“正确”事情是保持结果一致。如果您有两种寻找雇员的方法,请确保每种情况下返回的结果都相同。