JSON响应重定向

时间:2015-11-27 06:13:24

标签: ruby-on-rails json rest

Employee有很多PartyInvitesParty有很多PartyInvites。我想要一个控制器方法来接受派对邀请。如果控制器PartyInvites有这个(更新)方法将Employee分配给Party,哪个控制器负责返回聚会对象?

也许我误解了JSON REST API,但如果您正在使用特定资源(在本例中为PartyInvite),那么我们是否可以返回客户端不期望的内容(Party)。也许我正在过度思考这一切。但是,当PartyInvite被接受时,应该使用重定向来将PartyInvite控制器重定向到Party控制器吗?

2 个答案:

答案 0 :(得分:1)

我不建议您在RESTful API中创建重定向,因为它不再是传统的REST API。

客户端应始终使用正确的状态代码获取所请求的资源。

然而,即使在API中也可以重定向客户端。您只需在响应标头中提供3xx Status CodeLocation即可。然后客户端必须创建一个新的API请求。

我只看到两个问题:

  • 如果资源是在RESTful API中创建的,通常会返回201状态。但由于客户端被重定向,因此无法使用此状态。 (这些信息当然也可以在回复的正文中)。

  • 每个客户都必须能够处理重定向。如果此API是公开的,您应明确在您的文档中说明API会重定向到其他位置。

更好的解决方案是将Party嵌入PartyInvite

示例:

{
  "id": 12425124,
  "invitee_count": 15,
  "party": {
    "id": 1252,
    "location": "Wallstreet 10",
    "and_so_on": "..."
  }
}

这是返回RESTful资源的nested方式。

但当然您也可以使用3xx HTTP Status Codes将客户端重定向到其他资源,但请确保客户端了解响应。

答案 1 :(得分:0)

是。 Party Invite更新可以重定向到特定Party的节目控制器并返回与Invite匹配的Party。当然,您可以使用PartyInvite本身执行此操作,使用API​​的客户端可以相应地进行调整。但是,这会破坏API的RESTful性