Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在REST API资源名称中使用通配符(*)_Rest_Api_Design Patterns - Fatal编程技术网

在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

在REST API中使用*作为资源ID是否合理?我想用它来搜索。我正在使用RESTEasy开发我的Web服务

假设我的资源是user,user有Name和Age。然后我的REST API看起来像:

/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参考也显示了这一点。我会听从你的建议,但我仍然不明白为什么我不能使用通配符作为路径参数。此外,我发现似乎可以使用括号和其他许多方法来选择一些资源。。。为什么不*?;)