我正在阅读RESTful API,这让我很困惑。
DELETE / zoos / 12 / animals / 5 - 为动物园#12删除动物#5
当你知道动物身份时,为什么有人需要暗示它是什么动物园?不仅仅是DELETE /animals/5
做这个工作吗?
或者这句话是否意味着删除动物园#12的第5只动物?
答案 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 /必须存在)。此模式称为绝对路由寻址,因为必须预先设置整个模式。但是,存在相对路由寻址,其中部分路由地址可以相对于当前路径存储。
如果您使用绝对寻址,并且不包括整个网址,那么该路由无效。