【问题标题】:JSON response redirectJSON 响应重定向
【发布时间】:2015-11-27 06:13:23
【问题描述】:

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

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

【问题讨论】:

  • 您可以让返回的 json 还包含有关当事人和员工的嵌套信息。根结构将包含 PartyInvite,但也有一个关键员工:{} 和派对:{}。

标签: ruby-on-rails json rest


【解决方案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": "..."
  }
}

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

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

【讨论】:

  • 你说我不应该重定向,而另一个人说我应该重定向。我只想给你一点,因为你至少提供了一个例子,但我不能将它标记为已接受,因为你没有提供证据说明为什么重定向在 RESTful API 中不好
  • 我在答案中添加了一些附加信息。请检查一下,如果有什么遗漏或不清楚,请告诉我。
【解决方案2】:

是的。派对邀请更新可以重定向到特定派对的表演控制器并返回与邀请匹配的派对。当然,您可以使用 PartyInvite 本身来执行此操作,使用 API 的客户端可以进行相应调整。但是,这会破坏 API 的 RESTful 特性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多