哪个资源有条件可用的REST代码

时间:2017-01-17 12:45:39

标签: rest

我正在制作一款游戏,您可以根据列表中的任务开始战斗。

一旦你完成一场战斗(输赢),战斗状态将不再可用,因为没有正在进行的战斗。

当您进行GET /战斗时,这将反映在API中。

  • 如果正在进行战斗,您将获得反映当前战斗状态的对象响应,以及200 REST代码。
  • 如果正在进行 no 战斗,它会告诉你不能这样做。

我的问题如下:我应该使用哪些REST代码来表示目前无法使用该战斗。

其他:

  • 我没有选择404,因为我的解释是针对一个不存在的页面,可能从未存在过,也可能永远不存在,而不是一个可能存在但现在不存在的资源。不过,我准备对我的解释做错了。
  • 我非常基础的研究表明409可能是适当的指示,但这意味着冲突是由于请求(例如PUT)而发生的,而我的GET的性质不会影响数据,只需报告其状态。
  • 我可以详细说明在200响应中没有发生战斗,但这感觉就像是一个REST代码工作。
  • 我意识到REST代码可能不是正确的方法,如果是这样,请提供见解。还有,你认为我应该阅读的任何内容。我是专业的前端开发人员,因此我通常使用API​​而不是编写它。

1 个答案:

答案 0 :(得分:1)

在使用唯一响应代码指示结果的约束下,我会选择HTTP 204(无内容)。我的理由是,您要做的是表明资源(您的战斗)是有效的,但目前没有可用的数据。

您还可以选择转到HTTP 200(确定)并返回指示当前状态的有效负载,无论是在战斗进行还是不进行战斗时。这就是我个人可能想要的,因为它有助于规范化呼叫者API的形状。而不是调用者必须记住返回代码周围的规则,他们在两个场景中都接收相同的数据结构并解释它以辨别上下文。这也可以让你在战斗完成后用历史数据(例如战斗统计数据)扩展API,而不会破坏对API的更改。

我正在考虑以下内容:正在进行中:

{
    "Id"         : 1234,
    "InProgress" : true,
    "Battle      :
    {
        "SomeProp"  : "SomeValue",
        "OtherProp" : "OtherValue"
    }
}

......对于没有进行中的事情,如下所示:

{
    "Id"         : 1234,
    "InProgress" : false,
    "Battle      : null
}

我认为这两种方法都被认为是适当的RESTful响应。对我而言,选择是您希望提供的API合约的个人偏好。