用于令牌生成的GET或POST

时间:2018-06-08 21:31:23

标签: rest http post get

我们有一个" RESTful"返回新创建的存储令牌的端点。生成令牌所需的所有信息都包含在承载令牌中,因此请求不需要正文。该请求不会导致数据库更改,因为未存储令牌。后续请求在没有任何中间数据库更改的情况下,在响应中提供不同的令牌。什么是正确的方法,POST或GET?

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

因为结果上有啤酒,所以我会尽量不要偏袒任何一方。来自IETF的GETPOST规则以及https://restfulapi.net/http-methods/#get上两种方法的讨论等资源不足以说服任何一方,部分原因是它是否适合于如果底层资源在请求之间没有变化,以及是否是我们生成的随机令牌,那么GET将返回不同的内容。是一种新的资源"什么时候不存储在数据库中。

2 个答案:

答案 0 :(得分:5)

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

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

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

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

另请参阅OAuth2 token endpoint强制POST

答案 1 :(得分:2)

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

  

什么是正确的方法,POST或GET?

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

但也要问自己一些更难的问题:

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