路径变量还是请求参数?
Path Variable or Request parameter?
我们在设计Rest
api时说,需要识别资源时使用Path Variable
,需要进行排序、过滤、搜索等操作时使用Request Parameters
, 页码。让我们以 Employee
:
为例
员工有 name
、companyName
、socialSecurityNo
等三个字段。
现在我想要一个 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 结果在每种情况下都相同。
我们在设计Rest
api时说,需要识别资源时使用Path Variable
,需要进行排序、过滤、搜索等操作时使用Request Parameters
, 页码。让我们以 Employee
:
员工有 name
、companyName
、socialSecurityNo
等三个字段。
现在我想要一个 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 结果在每种情况下都相同。