HTTP GET 安静地做某事
Posted
技术标签:
【中文标题】HTTP GET 安静地做某事【英文标题】:HTTP GET restful to do something 【发布时间】:2021-11-24 20:54:10 【问题描述】:我有点困惑 verb
在我想做某事时应该使用什么/良好做法。在某些情况下,我正在构建一个 API,我可以在其中获取一系列电影。自然,这很适合使用 GET
http://foo/api/v1/films/name
的宁静环境。但是,如果我想翻译那部电影,考虑到电影的类型,你会如何平静地处理这件事?我有http://foo/api/v1/translated/films
或api/v1/films/name/translate
。然而这并不平静。 post
没有意义,因为我没有创建任何东西。 GET 看起来很合适,但也不合适..
【问题讨论】:
【参考方案1】:您可以使用 put 动词,因为您的上下文需要更新/翻译已经存在的内容以及您可以作为参数发送的电影类型。
【讨论】:
我唯一担心的是我没有更新或创建任何资源。这不是误导或滥用 PUT 吗? 如果您决定使用 POST,您可以输入返回值: return CreatedATAction("Get", new id=Model.Id ) 返回带有 Location 标头的 Created (201) 响应。 docs.microsoft.com/en-us/dotnet/api/…【参考方案2】:今天(2021-11-24),不可避免的紧张。
如果请求的语义是essentially read only,那么你应该使用GET。 如果请求需要正文,则不应使用 GET,因为在 GET 请求的上下文中,正文没有 generally defined semantics。因此,如果您尝试向服务器发送(任意)信息以获取某些信息,则 GET(通常)不起作用。
因此,您转而使用 POST。
POST 在 HTTP 中有许多有用的用途,包括“此操作不值得标准化”的一般用途。 -- Fielding, 2009.
未来,我们应该有另一种选择。
2020 年末,HTTP 工作组投票通过了GET-with-a-body 提案;文档仍处于草稿状态:
Internet-Drafts 是最长有效期为六个月的草稿文件,可以随时被其他文件更新、替换或作废。将 Internet-Drafts 用作参考材料或将其引用为“正在进行的工作”是不合适的。
那么,也许有一天?我们将有一个带有主体的安全方法,可用于诸如“请对此请求的主体做一些有趣的事情,并向我发送结果的表示”之类的消息。
【讨论】:
看起来 GET 确实是一件合理的事情,但实现它的方式并不是很平静。我检查了谷歌翻译 API 规范,他们似乎使用了 POST,这似乎是正确的以上是关于HTTP GET 安静地做某事的主要内容,如果未能解决你的问题,请参考以下文章