【发布时间】: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
当遵循 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
我认为这取决于状态是否是一种资源。 REST 约定是 Controller/Resource/Sub -Resource,例如: 书籍/漫画/超人/FirstEditon 而不是 书籍/漫画/SuperMan?edition=FirstEdition
更具可读性,并表明 FirstEdition 是一种资源而不是一种状态。
【讨论】:
只有第二种方法对我有意义。在 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
【讨论】: