控制Restful Web服务中的内容类型

时间:2011-09-14 15:31:37

标签: ajax json rest jquery

我正在为内部企业应用程序设计Restful Web服务,并且很好奇如何合并JSON和“Web内容”请求。

与所有优秀的企业应用程序一样,Web应用程序有一个三字母缩写,反映在URL中。假设这个应用程序的“呼号”是abc,用户通过以下URL访问它

http://servername/abc

当用户访问应用程序的根目录时,我们希望将它们提供给主html页面,.js文件(包括jquery),css和图像。然后,jquery将开始将AJAX调用回服务器。

处理这些多种内容类型的最佳方法是什么?

http://servername/abc(返回index.html的内容)

http://servername/abc/javascript/jquery.js(返回一个js文件)

http://servername/abc/countries/de(返回JSON)

我应该将其拆分为两个网络环境吗?我是否应该在ajax调用中使用jquery contentType参数来显式指定JSON与HTML而不是其他内容?

2 个答案:

答案 0 :(得分:2)

jQuery contentType实际上只是一个参数,用于将HTTP请求中的内容类型标头设置为服务器。为AJAX调用设置它们始终是最佳实践。

添加了: 另一个好的做法是指定dataType参数,因为它将在您的HTTP请求上设置接受标头。这对GET和POST AJAX请求都很有用。

大多数(如果不是全部)Web服务框架(Rails,ASP.NET MVC,.NET WCF等)都有能力检查HTTP请求的标头并确定要回送的内容类型

例如: HTTP标头中的application/json会让您的Web服务器知道返回JSON响应而不是HTML或XML响应。

我看到为HTML / JSON服务组织的网络应用程序的一些更好的方法是让您的标准路由始终为您的HTML页面和资源提供服务,即:

http://servername/abc

http://servername/abc/javascript/jquery.js

会像你说的完全一样。对于您的JSON(甚至XML)响应,我看到人们创建一条明确理解的路由来回馈这些类型的响应,即:

http://servername/api/abc/countries/de

url路由以/api/开头,总是被理解为回送非html JSON / XML响应

这使您的公司很容易在内部和外部了解/api/路由是您的JSON / XML响应。它还可以让您更容易向外部客户公开这些方法,如果您希望这样做,因为基础设施就在那里,您只需要对请求进行身份验证等。

答案 1 :(得分:1)

执行此操作的好方法是使用标准HTTP Accept Header。在您的ajax请求中,您可以将此标头指定为application / json,然后所有其他Web请求都将包含浏览器的接受标头。然后,在服务器端,您可以使用Accept标头来确定要提供的内容。

如果您使用JQuery,那么如果您的dataType参数设置为“json”,则Accept标头将自动设置为application / json。