在REST API资源名称中使用通配符(*)
在REST API中使用*作为资源ID是否合理?我想用它来搜索。我正在使用RESTEasy开发我的Web服务 假设我的资源是user,user有Name和Age。然后我的REST API看起来像:在REST API资源名称中使用通配符(*),rest,api,design-patterns,Rest,Api,Design Patterns,在REST API中使用*作为资源ID是否合理?我想用它来搜索。我正在使用RESTEasy开发我的Web服务 假设我的资源是user,user有Name和Age。然后我的REST API看起来像: /users/{id}/name /users/{id}/age 现在,如果我想显示所有名称,我考虑使用以下方法: /users/*/name 这是正确的还是我应该使用另一种方法 编辑1:添加子资源 根据答案,建议使用字段查询参数。但假设我现在想要的是子资源的属性。例如: /user/*/name
/users/{id}/name
/users/{id}/age
现在,如果我想显示所有名称,我考虑使用以下方法:
/users/*/name
这是正确的还是我应该使用另一种方法
编辑1:添加子资源
根据答案,建议使用字段查询参数。但假设我现在想要的是子资源的属性。例如:
/user/*/name/full
/user/*/name/short
如果我遵循字段选项,我必须执行以下操作:
/user?fields=name-short
/user?fields=name-full
这并不好,因为name的属性以某种方式链接到name类
请考虑这个例子。试着了解这个想法;) 查询参数
您可能可以使用通配符,但不能使用您在问题中显示的方式。如果您想在同一请求中获得除名称之外的更多详细信息,该怎么办
您可以使用查询参数为用户
集合选择字段:
/users?fields=名称
/users?字段=年龄
/users?字段=姓名、年龄
或者你可以从以下方式中获得一些灵感:
/users?fields=名称(短、全)
或者,您可以使用点表示法:
/users?fields=name.short,name.full
或者两者混合使用,就像在
自定义媒体类型
如果不需要字段选择,可以使用自定义媒体类型。这就是我现在或多或少要做的。但问题是,然后我想以某种方式为名称添加另一个子资源。这样,一切都是层次化的。例如,/users/{id}/name/full或short。我知道我可以创建不同的资源,但是看起来不太好。我正在更新我的问题。提供的Google Drive API参考也显示了这一点。我会听从你的建议,但我仍然不明白为什么我不能使用通配符作为路径参数。此外,我发现似乎可以使用括号和其他许多方法来选择一些资源。。。为什么不*?;)