关于使用HTTP请求头在网站(HTML)和api(JSON)之间切换的意见
我们有一个电子商务网站,使用URL格式按类别显示产品组,该格式几乎完全映射到我们希望用于即将发布的API的REST URL格式 e、 g.关于使用HTTP请求头在网站(HTML)和api(JSON)之间切换的意见,html,json,api,http,Html,Json,Api,Http,我们有一个电子商务网站,使用URL格式按类别显示产品组,该格式几乎完全映射到我们希望用于即将发布的API的REST URL格式 e、 g.example.com/products/latest或example.com/products/hats 对可见(HTML)和不可见(JSON)结果使用相同的URL,并使用Accept http请求头来确定应返回的内容是否有效 i、 e.如果您使用Accept:application/json调用example.com/products/latest,您只会
example.com/products/latest
或example.com/products/hats
对可见(HTML)和不可见(JSON)结果使用相同的URL,并使用Accept http请求头来确定应返回的内容是否有效
i、 e.如果您使用Accept:application/json
调用example.com/products/latest,您只会得到产品数据,但如果您使用text/html
则会得到完整的html页面(页眉、页脚、网站浏览器等)
如果是这样,这是个好主意吗?例如,如果网站需要更改,但API需要稳定,我们会遇到问题吗
更新:一些有用的资源-这里是Peter Williams的一篇文章[1],讨论了HTTP Accept头到版本API的使用,我还引用了一个SO问题[2],它揭示了使用这种方法的一些问题。使用自定义HTTP头可能更好
[1] 说明使用Accept的理由:[2] jQuery(&IE)的问题:
[3] 说明使用Accept的理由:
[4] 持观望态度:我没有这方面的经验,但建议您通过URL(例如API.example.com/v1/products/hats)对API进行版本设置-我不确定是否适合在网站和API中使用相同的URL。使用http头通常是确定这一点的公认方式
例如,在ASP.NET MVC中,有一种方法检查
X-request-With
头,如果它等于“XMLHttpRequest”
,则将其视为ajax请求。上次我尝试这样做时(几年前),我发现我无法覆盖Opera中XMLHttpRequest对象的Accept头。如果你不担心这一点,那就去做吧,这就是HTTP的工作原理
我建议将HTML响应设置为比JSON响应具有更高的
q
值。不过,有些浏览器发送Accept://*
Yup-如果通过URL执行版本控制,则会导致问题。我以前见过使用头进行版本控制,但找不到引用(也不确定这是最好的方法。)@HugoRodger Brown:当然,我想你可以让你的API需要一个包含版本的自定义HTTP头。(假设您希望确保人们显式地调用给定版本的API——如果不是,那么显然所有这些都无关紧要。)