Web API是网络(即HTTP)的应用程序编程接口(API)。当程序的资源可以通过HTTP使用标准的HTTP方法GET,POST,PUT和DELETE操作时,就可以说这个应用程序支持web API,可以供其他应用程序使用。因为HTTP是平台无关的,所以HTTP服务可以被跨不同平台的不同设备使用。

HTTP服务的核心概念是存在的资源可以通过统一资源标识符(URI)标识。如果将资源比作名词,那么对资源的操作可以比作动词,这些操作表示HTTP方法,如Get, POST, PUT和DELETE。对于一个公司的雇员程序来讲,每个雇员都是程序要处理的资源。

我们来看一下HTTP服务是如何获取一个雇员详细信息的。URI http://server/hrapp/employees/12345包括雇员的ID并作为资源的标识符,本例中资源指的是一个雇员。对这个资源的操作是通过HTTP谓词完成的。获取一个雇员的详细信息,在URI http://server/hrapp/employees/12345上执行一个HTTP GET请求。更新这个雇员的信息,对这个URI上发送一个HTTP PUT请求。删除这个雇员,发送一个HTTP DELETE请求。创建一个新的雇员,发送一个HTTP POST不带标识符的请求(http://server/hrapp/employees)。

在使用POST和PUT时,服务必须传递雇员数据或资源表示。通常是作为HTTP请求消息正文发送的XML或JSON。HTTP服务使用XML或JSON发送响应,和请求类似。例如,http://server/hrapp/employees/12345GET请求的响应结果包含JSON,表示ID为12345的雇员。

HTTP服务使用HTTP状态码指示响应成功还是失败。例如,如果12345的雇员不存在,就会返回HTTP状态码404 – NOT found。如果请求成功,就会返回HTTP状态码200 – OK。

ASP.NET Web API框架使你能够通过多数开发人员熟悉功能强大的ASP.NET MVC编程模型创建基于HTTP的服务。如此,我们有一个URI http://server/hrapp/employees/12345并且客户端发送一个GET请求。为了响应这个请求,我们需要在某个地方写代码获取12345这个雇员的详细信息。很明显,这些代码是一些C#类中的一些方法。这里就是路由概念发挥作用的地方。

本例中的类通常继承自ApiController类,它是ASP.NET Web API框架的一部分。你需要做的就是创建一个ApiController的子类,例如EmployeesController,包含一个方法Get(int id)。ASP.NET Web API框架会路由所有的GET请求到这个方法,并URI中传递雇员ID作为参数。在该方法内部,你可以获取雇员详细信息,然后只返回Employee类型的一个对象即可。ASP.NET Web API框架会将employee对象序列化为JSON或XML。ASP.NET Web API支持内容协商:请求可以带有客户端期望的响应格式。Web API会尽可能的发送那种格式的响应。

带有消息的请求中,如POST,需要将方法定义为POST(Employee employee),有一个Employee类型的参数。ASP.NET Web API框架会反序列化请求(XML或JSON)为Employee对象。Web API是根据HTTP谓词路由一个请求到Action方法的。

ASP.NET MVC 4是作为Visual Studio 2012的一部分,Visual Studio 2010 SP1的扩展发行的。ASP.NET Web API是MVC 4.0的一部分。有一个叫做WEBAPI的新的项目模板可以用来创建Web API项目。还可以在同一个项目中有API和MVC两种路由器。