【问题标题】:The URI contains HTTP action verbs. Can I consider this API RESTful?URI 包含 HTTP 动作动词。我可以考虑这个 API RESTful 吗?
【发布时间】:2017-06-01 21:08:56
【问题描述】:

TutorialsPoint 在 RESTful 设计的上下文中定义了以下方法:

URI           HTTP      Body           Result
-----------------------------------------------------------------
listUsers     GET       empty          Show list of all the users
addUser       POST      JSON string    Add details of new user
deleteUser    DELETE    JSON string    Delete an existing user
:id           GET       empty          Show details of a user

我认为这是误导,因为它不是 RESTful。

RESTful 设计如下:

URI          HTTP      Body           Result
----------------------------------------------------------------
users        GET       empty          Show list of all the users
users        POST      JSON string    Add details of new user
users        DELETE    empty          Delete an existing user
users/:id    GET       empty          Show details of a user

我对 RESTful 的理解正确吗?


不管 RESTful 的定义如何,在我看来,TutorialsPoint 的设计是错误的,因为 URL 中的deleteUser 复制了已经作为DELETE HTTP 动作传递的信息,这违反了Once And Only Once 的普遍原则。

【问题讨论】:

    标签: rest url


    【解决方案1】:

    第一组端点对于 REST API 来说是一个糟糕的设计。都是关于 RPC 的(DELETE 请求不应该有负载)。

    第二组端点是面向资源的,这就是您在 REST API 中想要的。 URI 标识资源,HTTP 方法表示对资源的操作。


    但是 REST 架构远远超出了 URI 的设计。

    REST 架构风格独立于协议,但大多数时候它是基于 HTTP 协议设计的。

    RESTful 应用程序的基本概念是资源。资源可以有不同的表示。如需更多详细信息,此answer 可能会有所帮助。

    要被视为 RESTful,应用程序必须遵循 Roy Thomas Fielding 的论文 chapter 5 中定义的一组约束:

    【讨论】:

    • “URL 本身不是 RESTful”是什么意思?我认为围绕资源的 RESTful 设计意味着 URL 将包含资源地址而不是操作地址。至少他们不应该复制已经作为 HTTP 请求类型传递的内容。
    • @alpav RESTful 概念并不 取决于 URL 的设计方式。在基于 HTTP 协议设计 REST 时,URL 必须面向资源,但也有一组必须遵守的约束。
    • 是的,面向资源的 URL 并不是 RESTful 设计要求的唯一含义,但它是一种含义吗?任何 RESTful 设计中的操作都可以在 URL 内吗?我认为它不能。
    • @alpav 在基于 HTTP 的 REST 应用程序中,必须使用 URI 来标识资源,而必须使用 HTTP 方法来表达操作。所以,是的,第一组端点对于 REST API 来说是一个糟糕的设计。
    【解决方案2】:

    是的,您的理解是正确的。该教程具有误导性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2023-03-31
      • 2013-10-19
      相关资源
      最近更新 更多