2013-02-13 63 views
1

我正在构建我的第一个REST API(至少尝试)个人项目。REST最佳实践:商店是否也会返回元数据?

在这个项目中有一些资源叫做player,这些资源可以在team。根据REST API design rulebook资源应该是文件 a 商店和一个应该保持这些角色尽可能分离。

然而,我想追加一些元数据到team资源,例如team创建日期。 GET /teams/atlanta是否可以将该元数据(使其成为文档)与队列中的players(使其成为商店)一起返回。

这是个好主意吗?如果是这样,为什如果不是,为什么不,以及如何解决这个更好?

我知道开发REST API没有规则,但有很好的做法,我想坚持这些。请不要说这是我的第一个REST API,所以如果有的话请原谅我的无知。

回答

2

我建议让GET /teams/atlanta只返回关于团队的信息,例如您提到的创建日期,然后让GET /teams/atlanta/players返回该团队的球员列表。当您呈现使用GET以外的HTTP方法的API时,这些区别变得更加重要。例如,如果您想将球员添加到球队 - 如果您只需将球员对象投递到/teams/atlanta/players,那么比您在每次希望将整个球队对象缩小为/teams/atlanta时容易得多添加一个单独的球员。

如果您的API仅允许检索数据,并且如果它是针对特定客户端应用程序,则会有一个参数用于将所有团队数据组合为一个对象以保存客户端对数据进行额外请求,但请记住它不那么灵活。

您的应用程序可能希望通过调用GET /teams来显示团队列表,但您可能不希望列表中的每个对象都包含所有玩家信息,因为这是相当多的数据,但如果GET /teams/atlanta返回玩家信息则不一致,不要将其包含在列表版本中。

我个人倾向于按照我的建议分割资源,并且接受客户可能需要提出额外请求的事实。

+0

很好,没想到那个!这样,团队也可以更容易地扩展(例如'/队/亚特兰大/吉祥物')。我想我现在还没有REST思维模式。 – romeovs 2013-02-15 14:02:29