REST资源中的关系

时间:2016-11-19 17:41:35

标签: rest api

我是REST API设计的新手。在设计API时,我对资源关系感到困惑,需要建议。

我的API有一个工作流程,每个工作流程都有一个任务。我无法决定将任务保持为独立资源还是将其用作子资源。更确切地说:

工作流程资源:

/ API / V1 /工作流

任务资源:

选项1: 的 / API / V1 /工作流/ {workflowId} /任务/ {的TaskID}

选项2: 的 / API / V1 /任务/ {的TaskID}?workflowId =” 123”

我经历了一些堆栈溢出链接。有人说,queryString作为一个过滤器,应该是可选的,有利于使用子资源,而其他人更喜欢将任务保持为一个独立的资源,并使api url变小。

我觉得还有另一种方法可以将taskId和workflowId映射保留在我们的数据库中并让用户使用:

选项3:  的 / API / V1 /任务/ {的taskid}

但这似乎是维护映射的一大努力。

建议?

1 个答案:

答案 0 :(得分:1)

在REST中没有“子资源”这样的东西。一切都是自己的资源。也就是说,最好提出对用户有意义的网址,也方便自己。

如果任务始终是工作流程的一部分,则没有任何问题:

/workflow/abc/task/xyz

但这也完全没问题:

/task/xyz

这个绝对对我来说不寻常:

/tasks/{taskId}?workflowId=123?

因为如果我没有通过workflowId会发生什么?通常,查询参数确实用于搜索。我不能说这是否一定不稳定,但这似乎是一个坏主意。

因此,在前两者之间,客观上更好或更安静的方面没有区别。无论如何客户都不应该猜测它们,应该总是发现它们。

我个人会采用更深层次的结构,因为我认为网址更有用,更具描述性;但这是主观的。