我们有一个" RESTful"返回新创建的存储令牌的端点。生成令牌所需的所有信息都包含在承载令牌中,因此请求不需要正文。该请求不会导致数据库更改,因为未存储令牌。后续请求在没有任何中间数据库更改的情况下,在响应中提供不同的令牌。什么是正确的方法,POST或GET?
一个提议是GET和GET / id,其中id是令牌创建过程中使用的资源的标识符,而不是令牌本身。替代方案是POST。
因为结果上有啤酒,所以我会尽量不要偏袒任何一方。来自IETF的GET和POST规则以及https://restfulapi.net/http-methods/#get上两种方法的讨论等资源不足以说服任何一方,部分原因是它是否适合于如果底层资源在请求之间没有变化,以及是否是我们生成的随机令牌,那么GET将返回不同的内容。是一种新的资源"什么时候不存储在数据库中。
答案 0 :(得分:5)
您绝对应该使用POST
来生成令牌。
GET
用于检索现有资源的集合或由提供的路径参数标识的特定资源。
在这种情况下,您根本不是在服务器上生成资源。您不存储任何数据,以后无需检索任何数据。所以没有 REpresentational State Transfer 。
但是,由于您创建的令牌在每次调用时都会有所不同(iat
和exp
声明,假设您使用的是JWT),并且不应被任何中介缓存。 HTTP代理将POST
请求视为非幂等,使其成为令牌发布端点的最佳选择。
另请参阅OAuth2 token endpoint强制POST
。
答案 1 :(得分:2)
REST不是规范,它是一种架构风格。 HTTP方法具有非常特定的含义。 RESTful尤其意味着应该通过POST创建资源并返回所创建资源的URL。
什么是正确的方法,POST或GET?
这很容易回答。如果您希望您的服务是RESTful,那么它应该是POST。
但也要问自己一些更难的问题: