gpt4 book ai didi

rest - 就增加的开销而言,分层RESTful url还是比纯url更受青睐?

转载 作者:行者123 更新时间:2023-12-03 13:48:53 26 4
gpt4 key购买 nike

假设我有一个网站,用户可以在该网站上载和显示他们的图片。 RESTful URL到该用户的单个图片如下所示:

http://api.gallery.com/users/{user-id}/images/{image-id}

但是image-id本身已经是唯一的,因此此url已经足以获取它:
http://api.gallery.com/images/{image-id}

从REST的角度来看,第一个比较合适,但是我应该 来验证,该图像实际上是该用户的 ,因为有人可以更改url,将用户ID更改为其他人的ID。在后一种情况下,我不需要添加此检查,这意味着更少的处理时间。

在这种情况下还是首选RESTful?

最佳答案

简而言之,两者都是首选。两者都可能返回相同的“事物”,但“上下文”不同。

让我们看一下您的URL:

  • /users:所有用户
  • /users/1:用户#1
  • /users/1/images:所有用户#1的图像
  • /users/1/images/1:用户#1的图像#1

  • 以上所有URL都围绕“用户”资源。是“所有用户”,“一个用户”,“一个用户的图像”等。
  • /images:所有图像
  • /images/1:图像#1

  • 以上所有URL均围绕“图像”资源。它是“所有图像”或“图像”。

    现在,从表面上看,这种区别似乎相对较小,但是在构建API时,这种差异可能会对数据的使用方式产生重大影响。

    例如,假设您要获取用户#1的所有图像的列表,这是首选吗?

    /users/1/images

    或者

    /images?where=user.id eq 1

    第一个 完全代表我们想要的,它更受约束且更易于理解,但是,这并不意味着我们也不应该支持第二种形式,因为查询功能可能非常有用。

    现在,如果要获取图像列表及其相关用户该怎么办?

    /users/???

    或者

    /images?include=user

    在这种情况下,第一个URL根本没有多大意义,因为我们试图获取图像列表,而不是用户列表,而第二个URL 恰好表示我们想要的。

    现在,关于安全性,理想情况下应该以对消费者完全透明的方式进行。消费者应该能够说“我想要所有图像”。并且只会收到他们有权访问的所有图像。如果他们尝试访问他们无权访问的特定资源,则应返回适当的HTTP错误代码。

    关于rest - 就增加的开销而言,分层RESTful url还是比纯url更受青睐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9169268/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com