【问题标题】:Is this a bad REST URL?这是一个糟糕的 REST URL 吗?
【发布时间】:2011-01-13 14:01:13
【问题描述】:

我刚刚阅读了有关 REST URL 的内容并看到了以下示例:

/API/用户/获取用户

现在,如果通过 HTTP 使用动词 GET 访问它,这不是一个错误的 URL,因为它描述了 URL 中的操作 (GET)?

【问题讨论】:

  • 值得注意的是,REST 本身只要求 URL 唯一地标识资源,并且不应赋予任何特定的语义含义。服务的消费者应将 URL 视为不透明的,并使用资源表示将包含指向其他资源的 URL 的原则来导航服务。话虽如此,它作为人类“消费者”无疑是有用的,能够将服务 URL 解释为层次结构。
  • @Joe:我认为你错过了问题的重点,我读到它的方式是关于动词与名词,而不是关于文件系统意义上的层次结构。
  • @Roger 是正确的,我对人们对 url 中动词的看法很感兴趣...

标签: rest


【解决方案1】:

/API/User/GetUser 不是 RESTful。使用动词来识别资源并不是一件好事。示例 url 仍然有效,但这也不正确。和下面的声明一样错误

String phoneNumber = "jhon@gmail.com";

【讨论】:

    【解决方案2】:

    没有 REST URL 这样的东西。事实上,REST URL 这个词几乎是矛盾的。 作为应用程序状态引擎的超媒体约束保证了 URL 是无关紧要的:无论如何,您只关注服务器提供给您的链接。您永远不会在任何地方看到、读取或键入 URI。 (就像浏览网页一样:你不需要查看链接的 URL,阅读它,记住它,然后在地址栏中输入它;你只需点击它,而不在乎它实际上在说什么。)

    REST URL 一词意味着您关心 REST 架构中的 URL。但是,如果您关心 REST 架构中的 URL,那么您就不是 RESTful。因此,REST URL 是矛盾的。

    [注意:正确的 URI 设计对于 URI 的 URI 特性非常重要,尤其是 I 部分。此外,漂亮 URL 有很多好的可用性 原因。但这两者都与 REST 无关。]

    【讨论】:

    • @Jörg - 我理解您的观点,但在现实世界中,您有开发人员创建通过 HTTP 访问的 RESTful API,我必须考虑这一点以尝试理解他们的想法
    • Rest URL 是荒谬的,微格式在这件事上完全没有受过教育。赞成。
    • 我明白这一点,但这似乎很迂腐,即使措辞错误,您也清楚地了解被问到的潜在问题。他在问他使用的路径是否是错误的形式。
    • @Amalgovinus:它不可能是坏的形式,因为形式是不相关的。 HATEOAS 意味着您关注 链接。你不读它们。因此,URI 是什么样子是完全不相关的。
    • 如果我要为其他开发人员制作一个 API 以供使用,HATEOAS 不是我要遵循的理念。
    【解决方案3】:

    这更像是一种约定,而不是硬性规则,但我更愿意看到类似/API/User/7123 的东西。 GET/POST/etc 描述了动作动词,因此将它放在 url 中也会使其变得多余。 在这种情况下,没有理由不遵循经过验证的良好做法。

    这里有一些好东西:Understanding REST: Verbs, error codes, and authentication

    【讨论】:

    • @SLott 怎么样 /Dictionary/English/Kick 来检索单词“Kick”的定义?
    • @Darrel Miller:标记“Kick”没有用作动词;它被用作一串字素来识别特定的单词。它不是动词,因为它被用作指示做什么。这只是字符。
    • @S.Lott 在 REST 接口中,URI 应该对客户端不透明,因此它们都只是字符。问题是我们有一种货物崇拜的情况,每个人似乎都知道 URI 中不应该有动词,但很少有人知道为什么。
    • 当人们将动词放在 URL 中时,可能会产生一些负面影响。首先,它可能会让接口使用者非常困惑,尤其是当 HTTP 动词的行为与 URI 中的动词相矛盾时。其次,它会导致人们违反 HTTP 动词的预期行为。典型的例子是使用“GET /myresource/delete”操作。但是,如果您查看一些示例,您会看到类似“GET /myresource/edit”的内容。这可能是完全有效的,也可能不是,但是你不能说它违反了 REST,因为 URL 中有一个动词。
    • @Darrel Miller:我是一名 Web 服务架构师。我正在尝试了解 Web 服务架构。我试图理解你的观点。我试图根据您对 URL 中动词的看法得出一个明确的“是”或“否”。如果您的意见是“是”,那么我试图在没有似是而非的例子或代码味道的情况下为“是”找到一个明确的理由。然而,从你最后的评论来看,我似乎应该停止试图完全理解你的观点,并坚持我肤浅的不理解。我只是想明白你的意思。
    【解决方案4】:

    更好的方法是使用 /API/User/7123 并使用 GET/POST 方法来表示操作

    【讨论】:

      【解决方案5】:

      这不一定是坏事……它更多地与您用来生成其余 URL 的框架有关。 @Infinity 发布的链接是一个很好的资源,但不要将自己局限于一套理论,因为它可能会导致某些框架中的工作量过多。

      例如,在使用 DELETE 方法之前,您没有理由不想在 /API/Users/{id}/Delete 上运行 GET 以显示“您确定”类型的消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        • 2011-08-01
        相关资源
        最近更新 更多