【问题标题】:REST - Handling a route name for this scenarioREST - 处理此场景的路由名称
【发布时间】:2015-01-08 01:54:35
【问题描述】:

我正在和朋友一起做一个项目,我们想在用户进入我的下一轮彩票游戏时向他们发送一封电子邮件。我想向社区征求一些关于什么是特定场景的好路线名称和层次结构的建议。

我有一个数据库和一个 API。在我的数据库中,我有一个包含用户的表。此用户表上有一个名为 IsProcessedForLottery 的标志。每天晚上我都会将我的用户发送到我朋友的数据库表(仅限 IsProcessedForLottery = false 的用户)。他的 cron 工作将运行对数据执行计算的代码(在他这边),然后他的想法是让他调用我的 REST API 来告诉我谁中了彩票。这个调用应该做 3 件事:

  1. 更新我表中的获胜用户以设置 IsProcessedForLottery = true
  2. 通过表格中的电子邮件地址向该特定用户发送电子邮件
  3. 在“LotteryWinners”表中插入新行

假设我不能自己运行计算,他不能发送电子邮件,更重要的是,我不能调用他的 API 来询问特定用户是否是赢家与否。数据要发给他,过段时间他要把获胜者发回给我。

总而言之,我将数据发送给他,他的算法运行,然后他调用我的 API 告诉我谁赢了。然后我通过电子邮件告诉用户他们赢了,更新用户,并在表格中插入一条记录。

有哪些途径可以实现这一目标?路由是否必须映射回用户或类?例如

 HTTP POST   /users/1/lottery  

这是否意味着用户 1 中了彩票?即使用户下面没有彩票收藏?在我的应用程序中,彩票甚至不是一门课程。没有 /users/1/lottery/1 等概念。所有路由都必须映射回类吗?在此操作中,我可以一次性完成上述所有 3 件事(电子邮件、更新用户和在 LotteryWinners 表中添加行)。

或者说需要进行两次调用的 REST 方法:

 1. HTTP PUT /users/1   

将 IsProcessedForLottery 值设置为 true 进行更新。这里唯一的问题是我需要传递表示为 JSON 的整个用户对象,这对于我需要更新的一个字段来说似乎有点过分了。随后是另一个呼叫

 2. HTTP POST /lottery/

在用户 ID 为 1 的彩票中奖者中插入新行,然后发送电子邮件(我可以传递一些包含用户 ID 或用户对象的 JSON)

有什么想法吗?

非常感谢大家,感谢您花时间阅读本文:)

【问题讨论】:

    标签: rest asp.net-web-api2


    【解决方案1】:

    在这种情况下,我认为一个好的 REST API 设计是这样的:

    HTTP POST /users/1?params
    

    您可以在参数中设置要更新的字段。

    要设计一个 REST API,如何设计完全是你自己的事,没有严格的规则或语法,但我们应该做到精确且一目了然。在您提出的两个选项中,存在一些问题:

    选项 1:

    对于 REST API 路由,主 URL 中始终存在分类良好的实体,在这种情况下,您只想更新用户,彩票只是用户的属性而不是实体,所以它应该不在主 URL 中。

    选项 2:

    正如你所说,解决这个问题有点太复杂了。

    随便设计一个REST API,没有黄金法则,你可以参考AWS等一些知名的API。

    这是它的 S3 API: http://docs.aws.amazon.com/AmazonS3/latest/API/APIRest.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-04
      • 2016-02-14
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多