【发布时间】:2020-11-21 00:36:10
【问题描述】:
实际上,我正在重写我们工作中的一些 API(在 ASP.Net Core 3.1 中),并尝试使它们成为 RESTFull。 我遇到了一些应该使用 HTTP GET 调用它的方法,因为它用于检索一些数据,但参数被包装在一个相当大的 DTO 中。
所以我问自己如何处理它:
- 让它将 DTO 放在 URL 中,但大小有什么限制?
- 在 HTTP GET 请求中放入正文。我进行了一些搜索,但我发现的结果很旧。显然它是允许的,但在过去不鼓励
- 使用 HTTP Post,但不是 REST,因为应该使用 POST 来创建数据
我认为更好的解决方案是使用 HTTP Get with body(根据这篇文章https://thecodebuzz.com/http-get-delete-request-body-guidelines/ 这是可能的)
有人遇到过同样的问题吗?现在的指导方针是什么?
感谢您的意见
【问题讨论】:
-
如果你有一个类似 seach 的端点,它接受很多参数,只需将其设为 POST。如果您不这样做,并且您无法将您的服务称为“完全 REST”,会发生什么?没有人会在意。
-
这能回答你的问题吗? HTTP GET with request body
-
@Zinov 我已经读过这篇文章,但自从它是 11 年前写的我不确定它仍然是相关的@CodeCaster 我知道这没什么大不了的,但作为一个年轻的程序员当我没有编码的坏习惯时,我想学习尽可能多的最佳实践
-
@S.Martignier 围绕这个类似主题有很多问题/答案,这将创建一个不需要的新答案线程。但是回答您的部分问题时,当您在请求正文中传递某些内容时,您应该使用 Content-Type ,因为 GET 在语义上是错误的。你也可以在这里查看规范tools.ietf.org/html/rfc7231#section-3.1.1.5。此外,如果您使用 swagger 为您的 API 创建文档,openapi 的最新标准将抱怨 GET 上的正文