RESTful API 格式 '/foos/1/bars/2' 是什么意思?

What does RESTful API format '/foos/1/bars/2' means?

我正在阅读 RESTful API,这让我很困惑。

DELETE /zoos/12/animals/5 - Deletes animal #5 for zoo #12

当你知道动物 ID 时,为什么有人需要暗示它是什么动物园?不只是 DELETE /animals/5 完成这项工作吗?

或者这个语句的意思是删除动物园#12 的第 5 只动物?

这完全取决于体系结构和上下文。

在这种情况下,人们会假设对于 Zoo 每个 Animal 都有一个唯一的 Id

所以 Zoo # 13 Animal #5 可能 Animal 不同于 Zoo #12 Animal # 5

所以你不会想要 Delete Animal #5 因为如果你不指定 Zoo [=12 它可能会从所有 Zoo 中删除=]

使用以下请求,我将解释此 RESTful 请求:

DELETE /zoos/12/animals/5

DELETE 定义了 REST 请求的方法。在这种情况下,我们请求 remove/delete 资源。

/zoos/12/animals/5 是我们发出请求的资源。您可以将其视为唯一 ID,但不适用于数据库中的单个实体。它是一个逻辑实体,可能跨越传统关系数据库中的多个表。

这个特定的 REST URI 建议我们从 ID 为 12 的 Zoos 中选择一个 Zoo,从 ID 为 5 的 Animals 中选择一个 Animal,尽管 REST 并不意味着后端实现是关系型的。

但是,使用 NoSQL Db,这个 URI 可能意味着我们正在访问 Zoo Document 12。然后这个文档可能会有一个 'animals' 数组 属性,然后它可能会解释动物作为数组中的第 5 个。

REST的目的是抽象关系数据库的传统方法,限制用户请求超出范围或他们无权访问的资源。

我喜欢把它想象成穿过一座建筑物。当你在一个给定的房间里时,你只能进入相邻的房间,并且有门可供他们使用。如果当前房间没有门(或window、楼梯、梯子等)可以移动到不同的资源,那么如果不找到不同的入口位置和路径,你将无法进入这些房间。

不一定,rest的概念是路由决定因素和请求决定因素。进一步阐述 DELETE /zoos/12/animals/5 - Deletes animal #5 for zoo #12.This 意味着请求(删除)路由 /zoos/12 访问 12 动物园,可能存储在一些 database.then 12 个动物园 (/zoos/12/animals/5) 的动物在这种情况下得到任何 id 为 5 的动物(/zoos/12/ 必须存在)。这种模式被称为绝对路由寻址,因为必须预先考虑整个。然而,存在相对路由寻址,其中部分路由地址可以相对于当前路径存储。

如果您碰巧使用了绝对寻址,并且没有包含整个 url,则该路由无效。