【问题标题】:REST route resource by user用户的 REST 路由资源
【发布时间】:2018-12-15 19:17:12
【问题描述】:

我有很多资源,如产品、预订等。需要路线来按用户获取所有资源。

例如:

{GET} /bookings/user

我认为这是不正确的,因为这条路线会返回用户资源。还是我错了?

什么是正确的方法?

【问题讨论】:

    标签: rest architecture routing restful-architecture restful-url


    【解决方案1】:

    我认为这是不正确的,因为这条路线会返回用户资源。还是我错了?

    它返回由/bookings/user 标识的资源的表示。那是什么资源?这取决于源服务器。

    不关心您对标识符使用的拼写约定。就 REST 而言,/6414b60b-1ecb-4e28-8887-4bfe120810e7 是一个非常令人满意的资源标识符。

    如果您想要人类可读的标识符,那也没关系。 RFC 3986 鼓励这种做法:

    一个 URI 通常必须被人们记住,当它由有意义或熟悉的组件组成时,人们更容易记住它。

    您还应该记住,RFC 3986 区分 URI 中的分层和非分层信号

    URI 语法是分层组织的,组件按重要性从左到右递减的顺序列出。 -- section 1.2.3

    路径组件包含通常以分层形式组织的数据,以及非分层查询组件中的数据 -- section 3.3

    查询组件包含非分层数据,这些数据与路径组件(第 3.3 节)中的数据一起用于标识 URI 方案和命名权限(如果有)范围内的资源 --section 3.4

    简而言之,如果您描述的是层次结构中描述的信息,那么使用路径段很有意义

    我不返回用户和用户ID,需要返回所有授权用户的预订。

    听起来您在描述/my/bookings 之类的拼写。

    可能有助于 URI 设计的启发式方法是考虑 relative references 的好处;与文件系统一样,您可以使用点段导航到命名空间的根目录。

    `/my/bookings` + `../profile` --> `/my/profile`
    

    您可能不想支持hackable URI 的原因有;因此,您需要仔细考虑该约束及其含义。

    【讨论】:

      【解决方案2】:

      通常,为此会使用查询参数:

      GET /bookings?userId={userId}
      

      这将返回给定用户 ID 的所有预订。

      【讨论】:

      • 我不返回用户和用户ID,需要返回所有授权用户的预订。
      • @J.Doe 我希望端点 /bookings 提供预订。查询参数?userId= 指定一个过滤器以应用于返回的预订。在这种情况下,过滤器将只允许特定用户的预订。
      猜你喜欢
      • 2011-07-10
      • 2012-07-28
      • 1970-01-01
      • 2013-01-31
      • 2015-10-15
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      相关资源
      最近更新 更多