http内容协商可以用来使客户端和服务器就数据格式和语言达成一致。也许您对我以前的问题感兴趣(实际上,浏览器和服务器正在使用HTTP内容谈判吗?(,但是没有必要阅读。
在开发基于HTTP的API?时,这个概念真的很有意义(API是最终用户未使用的Web服务。它以程序化的方式独家称为。(p>内容谈判的替代方案是"常规"参数(例如http://example.org/myService?someParam=1234&lang=en&format=xml
(。
大多数客户端框架使调用Web服务并发送参数非常容易。配置特殊的HTTP标头通常很难。使用HTTP内容谈判似乎还有更多的工作。
同时无需进行谈判。客户将以了解哪些格式和语言可用的方式进行编程。因此,它只会在这方面拨打有效的呼叫并完全得到想要的东西。
如果服务器要拒绝呼叫,则可以发送应用程序级别的错误而不是HTTP错误。根据我的经验,应用程序级错误更容易处理。无论如何您都需要该代码。您不一定需要解释HTTP错误。您可以将所有这些都视为通用失败。
内容谈判似乎非常适合其余理念,但我对具体成本和收益更感兴趣。
http内容谈判以什么方式优于仅添加API参数?
许多框架都可以吹捧与任何休息的API开箱即用的能力。主要是因为,与任何可能的恢复实现都不是可行的,而没有非常广泛的配置功能,我所看到的配置没有。但是,这是框架的错,而不是API。
使用请求/响应标头对与任何精心设计的RESTFUL API进行通信至关重要。标题对于发送诸如访问令牌和消息主体签名之类的信息很有用,并接收诸如收集大小和分页详细信息之类的信息。为什么不使用已经存在的系统来确切地进行谈判内容格式?使用现有HTTP规范的全部范围正是静止的。
关于http错误...为什么您会把它们全部对待?404的处理应与400的处理方式不同,该处理应与409的处理方式不同。我误解了您,或者我认为您缺少休息的某些关键方面。
在开发基于HTTP的API时,这个概念真的很有意义吗?(API是最终用户未使用的Web服务。它以程序化的方式专门称为。(
是的,仍然可以。
客户将以了解哪些格式和语言可用的方式进行编程。
听起来您正在将客户端耦合到特定的API,这在某种程度上错过了这一点。客户应该绝对理解它本身理解的那些媒体类型,但是为什么要知道可用的呢?
野自己写道:
REST旨在用于跨越多个组织的长期基于网络的应用程序。
现在,特别是关于谈判的,Fielding有一个有趣的观察结果,即在大多数情况下,您都希望每个协商的资源都有自己的标识符。
因此, http://example.org/myService?someParam=1234
带有适当的标头,将返回http://example.org/myService?someParam=1234&lang=en&format=xml
的表示形式。这可能是通过重定向(似乎是2006年最适合的机制(,也可能只是一次返回谈判的表示形式,而元数据提供了返回表示的标识符
请注意,后者的请求仍然无状态 - 如果您协商到特定资源,或者就像立即想要的那样,服务器不应以不同的方式做出响应。例如,您最终可能会与一台服务器进行谈判,并将其重新定向到您想要在完全不同的主机上的表示形式。
这意味着服务器无法真正区分谈判的客户与那些不这样的客户。您可以将协商资源的标识符直接连接到您的客户端,它将"工作"。
以什么方式http内容谈判优于仅添加API参数?
标准化。通过内容协商,我的 generic 客户端无需了解您的API使用的拼写惯例。中介组件(例如:缓存(也不需要了解您的拼写约定。
在开发基于HTTP的API时,这个概念真的很有意义吗?(API是最终用户未使用的Web服务。它以程序化的方式专门称为。(
回到这一点:休息是选择诱导特定属性的建筑约束的集合。换句话说,我们正在做出权衡。如果在您的情况下,长期居住客户的优势并不有价值,那么支持该用例的建筑约束就不会承受其全部重量。