Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于使用HTTP请求头在网站(HTML)和api(JSON)之间切换的意见_Html_Json_Api_Http - Fatal编程技术网

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

关于使用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,您只会

我们有一个电子商务网站,使用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,您只会得到产品数据,但如果您使用
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——如果不是,那么显然所有这些都无关紧要。)