【问题标题】:GET or POST for token generationGET 或 POST 用于生成令牌
【发布时间】:2018-06-08 21:31:22
【问题描述】:

我们有一个“RESTful”端点,它返回一个新创建的存储令牌。生成令牌所需的所有信息都包含在不记名令牌中,因此请求不需要正文。该请求不会导致数据库更改,因为未存储令牌。后续请求(没有任何干预数据库更改)在响应中提供不同的令牌。正确的方法是 POST 还是 GET?

一个提案是 GET 和 GET/id,其中 id 是在令牌创建过程中使用的资源的标识符,而不是令牌本身。替代方法是 POST。

既然有啤酒依赖于结果,我会尽量不要太明显地偏袒任何一方。诸如来自 IETF 的 GETPOST 的规则以及在 https://restfulapi.net/http-methods/#get 对这两种方法的讨论之类的资源不足以说服任何一方,部分原因是对于 GET 是否适合返回不同的东西存在分歧如果请求之间的底层资源没有改变,以及“我们生成的随机令牌”在未存储在数据库中时是否是新的“资源”。

【问题讨论】:

    标签: rest http post get


    【解决方案1】:

    您绝对应该使用POST 来生成令牌。

    GET 用于检索现有资源的集合或由提供的路径参数标识的特定资源。

    在这种情况下,您根本没有真正在服务器上生成资源。您不存储任何数据,以后也无需检索任何数据。所以没有REpresentational State Transfer

    但是,由于您创建的令牌在每次调用时都会有所不同(iatexp 声明,假设您使用的是 JWT)并且不应被任何中介缓存。 HTTP 代理将POST 请求视为非幂等的,使其成为令牌发布端点的最佳选择。

    参见例如OAuth2 token endpoint 强制POST

    【讨论】:

      【解决方案2】:

      REST 不是一种规范,它是一种架构风格。 HTTP 方法具有非常特定的含义。 RESTful 尤其意味着资源应该通过 POST 创建并返回所创建资源的 URL。

      正确的方法是 POST 还是 GET?

      这很容易回答。如果你希望你的服务是 RESTful 的,它应该是 POST。

      但也要问自己更难回答的问题:

      • 在我们的特定情况下,该服务是否应该是 RESTful 的?
      • 如果我们将此服务设为非 RESTful,我们会获得哪些优势和劣势? (不安分?:))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-04
        • 2021-05-31
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-29
        • 2010-12-20
        相关资源
        最近更新 更多