关于使用HTTP请求标头在网站(HTML)和api(JSON)之间切换的意见

时间:2011-11-24 17:24:21

标签: html json api http

我们有一个电子商务网站,使用URL格式按类别显示产品组,该格式几乎完全映射到我们希望用于即将推出的API的REST URL格式。

e.g。 example.com/products/latestexample.com/products/hats

对可见(HTML)和不可见(JSON)结果使用相同的URL是否有效,并使用Accept http请求标头来确定应返回的内容。

即。如果您使用Accept: application/json调用example.com/products/latest,则只能获得产品数据,但如果您使用text/html,则会获得完整的HTML页面(页眉,页脚,网站Chrome等)

如果是这样,这是一个好主意 - 例如,如果网站需要更改,但API需要稳定,我们会遇到问题吗?

更新:一些有用的资源 - 这是Peter Williams讨论将HTTP Accept标头用于版本API的文章[1],我还引用了一个SO问题[2]揭示了使用这种方法的一些问题。可能更好地使用自定义HTTP标头?

[1]提出使用接受的案例:http://barelyenough.org/blog/2008/05/versioning-rest-web-services/
[2] jQuery(& IE)的问题:Cannot properly set the Accept HTTP header with jQuery
[3]提出使用接受的案例:http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html
[4]坐在围栏上:http://www.informit.com/articles/article.aspx?p=1566460

3 个答案:

答案 0 :(得分:2)

使用http标头通常成为确定这一点的可接受方式。

例如,在ASP.NET MVC中,有IsAjaxRequest方法检查X-Requested-With标头,如果它等于"XMLHttpRequest",则认为它是ajax请求。< / p>

答案 1 :(得分:1)

上次我试图这样做(这是几年前),我发现我无法覆盖Opera中XMLHttpRequest对象的Accept标头。如果这不是你的担忧,那就去吧,这就是HTTP的设计工作方式。

我建议您将HTML响应设置为比JSON响应更高q值,但有些浏览器会发送Accept: */*

答案 2 :(得分:-1)

我对此没有任何经验,但 Restful Web Services 建议您通过网址对API进行版本控制(例如api.example.com/v1/products/hats) - 我是不确定是否适合使用网站和API的相同网址。