2016-11-29 53 views
1

我正在为测试和测试运行元数据设计一个RESTful API。我有两个资源:TestTestRun。在数据库中他们有一对一的关系。通过向另一个(相关)资源发送POST请求来创建/修改资源

首先,我通过发送POSTapi/v1/test创建一个Test资源。

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

然后,我还可以通过发送POSTapi/v1/test/{id}/finish,该修改对应TestRun资源停止测试(设置一些领域,如finish_timeresult等)。

API的用户将永远不会有GET访问TestRun资源,并且只会通过其相关的Test资源访问它们。

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

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

+0

'我怀疑这对开发人员来说也很简单'。可能是什么问题呢? – 2016-11-29 10:42:30

+0

@Lutz Horn这显然是一个错误的问题:)我只是想知道,如果这样做是一个好主意,并且它不符合REST最佳实践。 –

回答

0

您的API不会允许访问testrun,所以testrun似乎不是一个REST资源。实际上,就测试而言,您的URL是REST的混合体,而RPC是特别是/run/finish路径的混合体。

RPC不休息,所以我想这返工一点点:

  • 仅使用一个类型的资源,测试,在api/v1/test/{id}
  • 测试具有可以使用retrievd状态的GET请求api/v1/test/{id}
    • statusstoppedstartedfinished,...
    • finish_time
    • result
    • ...
  • 测试状态改变使用包含新状态的JSON主体唱出PATCH请求api/v1/test/{id}{"status": "started"}开始测试等。这取代了RPC调用。
+0

你还会保留现有的数据库设计吗?即我仍然会有一个Test表和一个TestRun表,当我向api/v1/test/{id}发出PATCH请求时,会改变TestRun表中的​​记录。 请注意,在我的设计中,测试本身没有状态,但它的状态是由TestRun的start_time和end_time定义的。 –

+0

我实际上会添加一个状态字段,因为它使查询更容易。 –

+1

REST与你无关坚持资源。资源可以存储在多个表中。 – 2016-11-29 11:50:20