1

假设我有一个包含任务列表的 RESTful 服务。

GET mycorp/api/v1/tasks

这些任务中的每一个都可以有一个或多个上下文。

GET mycorp/api/v1/tasks?context=somecontext

在使用过程中,用户删除了一批任务。

DELETE mycorp/api/v1/tasks?context=somecontext

让我们假设一旦执行此操作,由于上面的 DELETE 操作,我们现在有一些上下文在系统中处于孤立状态。让我们还假设可以使用孤立的上下文来节省用户必须一遍又一遍地输入相同的上下文。

如果用户 DID 想要显式删除这些上下文,那么在 REST 上下文中执行此操作的正确方法是什么?我自然倾向于两种选择。

DELETE mycorp/api/v1/tasks?context=somecontext&&deleteorphancontexts=true

并且

DELETE mycorp/api/v1/contexts?isorphaned=true

我对 REST 还是新手,以及如何确保我构建的 api 是严格的、有意义的。

4

1 回答 1

2

首先,REST 不是一套严格的指导方针,因此对此没有明确的答案,但我认为它会帮助您将不同的 URL 视为资源(这毕竟是 REST 的全部内容)。

当您向服务器发送 DELETE 请求时,您是在指示它删除该位置的资源。在您的示例中,您假设您正在删除集合的内容,但您实际上是在指示服务器删除集合本身。因此,如果您在之后立即发出 GET 请求,您应该期望得到 204(无内容)响应,而不是带有空集合的 200 响应。如果这是合适的,那么你的问题就解决了。

在我看来,将 DELETE 请求用于单个上下文/任务会更好,这与 PUT 请求相反。通过发出包含删除指定内容的命令的 POST 请求来修改集合更正确。

通过这种方式,您可以 POST 到

mycorp/api/v1/contexts

并发送一个命令,指示服务器删除所有孤儿。

我更喜欢这个的原因是,您将上下文路径视为一个集合,其中某些项目可能是孤立的。

通常,当您有疑问时,POST 是您的朋友,因为它是 HTTP 的小丑。

于 2012-06-13T13:00:01.133 回答