我正在为测试和测试运行元数据设计RESTful API。我有两个资源:Test
和TestRun
。在引擎盖下,它们在数据库中具有一对一的关系。
首先,我通过向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
答案 0 :(得分:0)
您的API不允许访问testrun,因此testrun似乎不是REST资源。实际上,就测试而言,您的URL是REST的混合,以及RPC,尤其是/run
和/finish
路径。
RPC不是REST,所以我会稍微重做一下:
api/v1/test/{id}
使用一种类型的资源,即测试。GET
请求api/v1/test/{id}
进行检索:
status
:stopped
,started
,finished
,... finish_time
result
PATCH
请求更改为api/v1/test/{id}
,其中JSON正文包含新状态:{"status": "started"}
以启动测试等。这将取代RPC调用