通过向另一个(相关)资源发送POST请求来创建/修改资源

时间:2016-11-29 07:41:42

标签: rest api-design

我正在为测试和测试运行元数据设计RESTful API。我有两个资源:TestTestRun。在引擎盖下,它们在数据库中具有一对一的关系。

首先,我通过向Test发送POST来创建api/v1/test资源。

然后我必须开始这个测试。我通过向POST发送api/v1/test/{id}/run来创建与TestRun资源相关的Test资源。

然后我也可以通过向POST发送api/v1/test/{id}/finish来停止测试,TestRun会修改相应的finish_time资源(设置一些字段,例如result,{{1等等。)。

API的用户永远不会GET访问TestRun个资源,只能通过相关的Test资源访问它们。

虽然看起来这个设计对于API用户来说非常简单,但我怀疑这对于开发人员来说也是如此简单。这个设计我提出的足够好吗?它是否违反任何REST原则或最佳实践?我将不胜感激任何意见。

整个API的扩展设计说明:https://gist.github.com/Ch00k/27724e29ec1bf044ebbfdabef9e842d5

1 个答案:

答案 0 :(得分:0)

您的API不允许访问testrun,因此testrun似乎不是REST资源。实际上,就测试而言,您的URL是REST的混合,以及RPC,尤其是/run/finish路径。

RPC不是REST,所以我会稍微重做一下:

  • 仅在api/v1/test/{id}使用一种类型的资源,即测试。
  • 测试的状态可以使用GET请求api/v1/test/{id}进行检索:
    • statusstoppedstartedfinished,...
    • finish_time
    • result
    • ...
  • 测试状态使用PATCH请求更改为api/v1/test/{id},其中JSON正文包含新状态:{"status": "started"}以启动测试等。这将取代RPC调用