什么是RESTful API格式' / foos / 1 / bars / 2'手段?

时间:2017-02-28 02:20:11

标签: rest restful-architecture

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

  

DELETE / zoos / 12 / animals / 5 - 为动物园#12删除动物#5

当你知道动物身份时,为什么有人需要暗示它是什么动物园?不仅仅是DELETE /animals/5做这个工作吗?

或者这句话是否意味着删除动物园#12的第5只动物?

3 个答案:

答案 0 :(得分:1)

这一切都取决于架构和背景。

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

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

因此,您不希望Delete Animal#5,因为如果您未指定Zoo Zoo,它可能会从所有Id中删除

答案 1 :(得分:1)

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

DELETE /zoos/12/animals/5

DELETE,定义REST请求的方法。在这种情况下,我们要求删除/删除资源。

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

这个特定的REST URI表明我们正在从ID为12的Zoos和ID为5的动物动物中选择动物园,尽管REST并不意味着后端实现是关系。

然而,使用NoSQL Db,这个URI可能意味着我们正在访问Zoo Document 12.这个文档可能会有一个'animals'数组属性,然后它可能会将动物放在数组中的第5位。< / p>

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

我喜欢把它想象成穿过建筑物。当您在一个给定的房间时,您只能访问与其中一个相邻的房间,并且可以为他们提供一扇门。如果当前房间没有门(或窗户,楼梯,梯子等)移动到不同的资源,那么在没有找到不同的入口和路径的情况下,您将无法访问这些房间。

答案 2 :(得分:0)

不一定,休息的概念是路由决定因素和请求决定因素。进一步说明DELETE / zoos / 12 / animals / 5 - 为动物园#12删除动物#5。这意味着路径/动物园/ 12的请求(删除)访问12动物园,可能存储在某个数据库中。然后动物为12动物园(/动物园/ 12 /动物/ 5)这个案例得到任何id为5的动物(/ zoos / 12 /必须存在)。此模式称为绝对路由寻址,因为必须预先设置整个模式。但是,存在相对路由寻址,其中部分路由地址可以相对于当前路径存储。

如果您使用绝对寻址,并且不包括整个网址,那么该路由无效。