我们有一个电子商务网站,使用URL格式按类别显示产品组,该格式几乎完全映射到我们希望用于即将推出的API的REST URL格式。
e.g。 example.com/products/latest
或example.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
答案 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的相同网址。