【问题标题】:REST: GET filtering conventionREST:GET 过滤约定
【发布时间】:2026-01-22 12:35:02
【问题描述】:

当遵循 REST 方法时,以下哪个 GET 请求更正确:

v1/companies/10/employees/state=approved

v1/companies/10/employees?state=approved

网上好像有混用。

【问题讨论】:

    标签: rest http asp.net-web-api asp.net-web-api2 api-design


    【解决方案1】:

    我认为这取决于状态是否是一种资源。 REST 约定是 Controller/Resource/Sub -Resource,例如: 书籍/漫画/超人/FirstEditon 而不是 书籍/漫画/SuperMan?edition=FirstEdition

    更具可读性,并表明 FirstEdition 是一种资源而不是一种状态。

    【讨论】:

      【解决方案2】:

      只有第二种方法对我有意义。在 RESTful 方法中,您必须使用 QueryString 来过滤返回的资源。在这种情况下,在查询字符串中添加要用作过滤器的资源属性。例如:

      v1/companies/10/employees?state=approved&attribute2=value&attribute3=value
      

      第一个 URI 对我来说没有任何意义,因为您在 URI 和 QueryString 之间进行混合以过滤结果。

      v1/companies/10/employees/state=approved
      

      为了澄清,让我们看另一个例子。仅当“状态”和“已批准”是资源时,下面的 URI 才有意义。但如果它们只是员工的属性,那么它就不是 RESTful。请记住,在设计 URI 时要考虑到公开资源而不是方法或操作。

      v1/companies/10/employees/state/approved
      

      【讨论】: