在REST API资源名称中使用通配符(*)

时间:2017-09-15 07:14:02

标签: rest api design-patterns

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

假设我拥有用户和用户具有姓名和年龄的资源。然后我的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的属性以某种方式链接到名称类,所以它并不好。

请考虑这个例子。试着理解;)

1 个答案:

答案 0 :(得分:2)

查询参数

您可以使用通配符,但不能使用您在问题中显示的方式。如果您想在同一请求中获取除名称之外的更多详细信息,该怎么办?

您可以使用查询参数来允许users集合的字段选择:

/users?fields=name
/users?fields=age
/users?fields=name,age

或者你可以从partial responses are handled in the Google Drive API

的方式中获得灵感
/users?fields=name(short,full)

或者,您可以使用点符号

/users?fields=name.short,name.full

或者使用两者的混合,例如Spotify API

自定义媒体类型

如果您不需要字段选择,则可以使用自定义媒体类型returning a predefined set of fields