动作“将竞争对手从team1移至team2”的剩余URL应该是什么?

时间:2019-01-07 20:12:18

标签: rest

我正在按照REST原则寻找一个好的URL,以“将竞争对手从team1迁移到team2

我的第一个猜测是:

/teams/{oldTeamId}/{newTeamId}/competitors/{competitorId}/move

但是它看起来不太像REST。

我应该将其分为2个基本调用吗?

  • 从team1中删除竞争对手,
  • 将竞争对手添加到team2中,

我应该从URL中删除一些数据并将其传递给正文吗?

我真的不知道该怎么做。

3 个答案:

答案 0 :(得分:0)

考虑如何将这个API实施为网站。

您可能会链接到一个表单-它可能是竞争对手,旧团队和新团队都为空白的表单,也可能是竞争对手和旧团队已预先填充的表单。您的消费者根据需要更新表单中的默认信息,然后提交。

请注意第一点(也由Roman Vottner提出)-您的消费者根本不需要查看URL。客户端知道HTML表单处理规则,因此它可以创建正确的HTTP请求,而无需了解有关域的任何信息。

第二点是,由于客户端只是将表单提交到HTML告诉的位置,因此您可以随意设置任何内容。

HTTP有趣的属性之一是缓存失效。请参见RFC 7234,对不安全请求的任何非错误响应都会使一种资源的所有缓存表示形式失效。

因此,您可以通过将其URI指定为表单的目标来选择使哪个资源无效。实际上,它为您提供了一种机制,可确保消费者可以读取自己的文字。

因此目标的一些合理选择可能是

/teams/{oldTeamId}

如果团队名册是最重要的。或者

/competitors/{competitorId}

如果描述玩家的资源是最重要的。

  

我真的不知道该怎么做。

专注于使其易于使用。您的资源模型不是域模型,不是数据模型。

观看吉姆·韦伯(Jim Webber)的演讲REST: DDD In the Large以更清晰地了解您的“ REST” API的外观可能会很有用。

答案 1 :(得分:0)

为回答您的问题,我不会将其分为两个调用,但是我会从该(GET)网址中获取一些数据并将其放入您的请求正文中。该请求可能是POST或PUT(或什至是补丁),但绝对不是GET,因为实际正在发生变化。

作为一种解决方案,对/ transfer的POST请求怎么样。毕竟,您(可能)正在创建一个新的转帐,例如需要球员,他们的新球队,甚至他们的旧球队。

答案 2 :(得分:0)

我将使用URL来标识资源,在这种情况下,该资源似乎是竞争对手的团队。

  • 将网址设为/competitors/{competitorId}/teams
  • 拨打电话PUT
  • 具有一个带有newTeamId的主体,并且如果需要,则具有oldTeamId。