【问题标题】:HTTP GET request with body for RESTful API [duplicate]带有 RESTful API 正文的 HTTP GET 请求 [重复]
【发布时间】:2019-03-11 09:08:12
【问题描述】:

我一直在研究如何实现以下内容:

我正在开发一个 RESTful Web API(使用 .Net Core 2.2)。我需要创建一个端点,消费客户端可以将一些文本发送到 API,API 替换此文本中的一些标记,并将文本返回给消费客户端。

我认为客户端应该简单地执行 GET 请求,正文中包含文本。然后,回复将是令牌替换后的新文本。但是,根据我的研究,似乎不应在 GET 请求的正文中添加任何带有语义的内容。我不确定带有某些需要被 API 替换的标记的任意文本是否符合语义?我还在“您不应该使用 GET 请求的主体来更改响应”中看到它。我想我在那里遇到了麻烦,因为取决于他身体里的东西,会影响反应。

那么,我一直在努力找出正确的方法。如果有人有指点,我将不胜感激。

谢谢。

【问题讨论】:

    标签: rest api get


    【解决方案1】:

    我认为客户端应该简单地执行 GET 请求,正文中包含文本。然后,回复将是令牌替换后的新文本。但是,根据我的研究,似乎不应在 GET 请求的正文中添加任何带有语义的内容。

    对 - RFC 7231

    GET 请求消息中的有效负载没有定义的语义;在 GET 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。

    在基本 HTTP 中,您可以选择。一种是在 URI 本身中包含文档的表示

    /?your_document_as_a_query_string
    /your/document/as/path/segments
    

    对于简短的文档,这种方法可以很好;但是实现不需要支持无限长的标识符,因此您可能会发现中间组件拒绝您的请求,或者在传输过程中裁剪 URI。

    实现目标的安全机制是使用POST,而不是GET。 POST 支持消息正文,因此您可以将空白表单发送到服务器,并在响应中接收回编辑后的版本。

    POST 是 HTTP 的通配符方法,它可以代表任何含义。在规范中,响应的正文 includes“表示操作的状态或从中获得的结果”。

    您可能还认为响应复制了请求正文的许多内容,并考虑从服务器获取模板值的映射,然后将模板应用到客户端的可能性。

    【讨论】:

    • 谢谢!好的,这是有道理的——我没有想到使用 POST,因为我通常不认为 POST 查询会返回除状态代码之外的任何内容。但我想一个 POST 查询可以返回任何东西。关于您的第二条评论,我确实考虑过让前端执行令牌替换。但是,如果我们将来有一个手机应用程序,我们会有两个前端做同样的事情,当它宁愿被“重构”到服务器 API 中并且只放在一个地方时。但这是真的 - 它会更快......我会考虑的......我可能会走那条路;)
    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 2015-07-02
    • 2019-12-02
    • 2018-11-19
    • 1970-01-01
    • 2017-01-27
    • 2020-09-07
    相关资源
    最近更新 更多