【问题标题】:Path Variable or Request parameter?路径变量或请求参数?
【发布时间】:2018-10-17 10:40:29
【问题描述】:

我们在设计Rest api时,就是说当你需要识别资源时使用Path Variable,当你需要进行排序、过滤、搜索、分页等操作时使用Request Parameters。让我们以Employee的场景为例:

Employee 具有三个字段,例如 namecompanyNamesocialSecurityNo

现在我想要一个拥有socialSecurityNo = ABC 的员工。

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

此外,我们基于socialSecurityNo 进行过滤并具有类似/employees?socialSecurityNo=ABC 的端点似乎很直观

当我感到困惑并认为两者都适用时,正确的方法是什么。

【问题讨论】:

    标签: spring rest api endpoint


    【解决方案1】:

    这是个好问题。

    /employees?socialSecurityNo=ABC

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

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

    我希望看到:

    /employees?surname=Smith
    

    因为这是对非唯一字段值的过滤,应返回 Employee 对象的集合。

    “正确”的做法是保持结果一致。如果您有两种方法找到员工,请确保每种情况下返回的结果都相同。

    【讨论】:

    • 我假设 socialSecurityNo 是唯一的,因此根据您的回答使用路径变量是有意义的。
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 2015-08-09
    • 2011-03-13
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多