REST以及RESTful的实现:Web API

来源:互联网 发布:淘宝商家怎么改头像 编辑:程序博客网 时间:2024/05/18 00:30
什么是REST?

REST (REpresentation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。

在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个惟一的地址。所有资源都共享统一的界面,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。

另一个重要的 REST 原则是分层系统,这表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。当 REST 架构的约束条件作为一个整体应用时,将生成一个可以扩展到大量客户端的应用程序。它还降低了客户端和服务器之间的交互延迟。统一界面简化了整个系统架构,改进了子系统之间交互的可见性。

REST 简化了客户端和服务器的实现。由于轻量级以及通过 HTTP 直接传输数据的特性,Web 服务的 RESTful 方法已经成为最常见的替代方法。可以使用各种语言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])实现客户端。RESTful Web 服务通常可以通过自动客户端或代表用户的应用程序访问。但是,这种服务的简便性让用户能够与之直接交互,使用它们的 Web 浏览器构建一个 GET URL 并读取返回的内容。

在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、POST、PUT、DELETE,还可能包括 HEADER 和 OPTIONS。

基于RESTful标准的实现:微软的web api

微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下:

GET:生到数据列表(默认),或者得到一条实体数据

POST:添加服务端添加一条记录,记录实体为Form对象

PUT:添加或修改服务端的一条记录,记录实体的Form对象,记录主键以GET方式进行传输

DELETE:删除 服务端的一条记录

注意上面公开的API接口都是在XMLHttpRequest情况下调用的,当然你可以使用jquery的ajax组件来完成这个请求调用,它的代码更加面向对象,下面举例说明一下


<html><head runat="server">    <meta name="viewport" content="width=device-width" />    <title>Web Api Test</title>    <script src="../../Scripts/jquery-1.7.1.min.js"></script>    <script type="text/javascript">                    function add() {                $.ajax({                    url: "/api/test/",                    type: "POST",                    data: { "UserID": 4, "UserName": "test", "UserEmail": "Parry@cnblogs.com" },                    success: function(data) { alert(JSON.stringify(data)); }                });            }            //更新            function update(id) {                $.ajax({                    url: "/api/test?id=" + id,                    type: "Put",                    data: { "UserID": 1, "UserName": "moditest", "UserEmail": "Parry@cnblogs.com" },                    success: function(data) { alert(JSON.stringify(data)); }                });            }            function deletes(id) {                $.ajax({                    url: "/api/test/1",                    type: "DELETE",                    success: function(data) { alert(data); }                });            } </script></head><body>    <div>        <fieldset>    <legend>测试Web Api    </legend>    <a href="javascript:add()">添加(post)</a>    <a href="javascript:update(1)">更新(put)</a>    <a href="javascript:deletes(1)">删除(delete)</a>    <a href="/api/test">列表(Get)</a>    <a href="/api/test/1">实体(Get)</a></fieldset>    </div></body></html>



创建 Web API 工程


启动 Visual Studio ,在开始页里选择“新建项目”。或者从“文件”菜单里,选择“新建项目”。

在模板面板中,选择“已安装”,并展开 Visual C# 节点。在 Visual C# 下面,选择 Web。在项目模板列表中,选择 ASP.NET MVC 4 Web 应用程序。将项目命名为 "HelloWebAPI" 然后点击“确定”。



在弹出的“新 ASP.NET MVC 4 项目”对话框中,选择“Web API”然后点“确定”。




添加模型

模型是指程序里的对象。 ASP.NET Web API 能够自动序列化模型为JSON,XML或者其它的格式,然后将序列化后的数据写入HTTP响应信息体里。只要客户端能读到序列化格式,它就能反序列化为对象。大部分的客户端都能够解析XML或JSON。 而且,客户端通过设置HTTP请求信息里的Accept头就能够表明它想要什么样的格式。

我们就创建一个表示用户的模型来开始吧。

如果解决方案资源管理器没显示的话,点击“视图”菜单并选择“解决方案资源管理器”。在解决方案资源管理器重,右击“Models”文件夹。在弹出菜单中,选择“添加“,”类“。

将类命名为 "Users"。接下来在 User类里加入下面的属性:

namespace HelloWebAPI.Models{public class Users{public string UserID{ get; set; }public string UserName { get; set; }public string UserEmail { get; set; }}}



添加控制器

控制器是一个处理HTTP请求的对象。当你创建完项目以后,”新建项目“向导就自动创建了2个控制器。在解决方案资源管理器里展开”Controllers“目录就能看到了。

HomeController 是一个传统的 ASP.NET MVC 控制器。它只是负责处理站点的HTML页,跟Web API没有直接关系。
ValuesController 是一个示例 WebAPI 控制器。

注意 如果你之前已经搞过 ASP.NET MVC,那你肯定已经对控制器很熟了。它在Web API里也是类似的,只不过在Web API里控制器不是从Controller类继承而是从ApiController类继承了。你会注意到,第一个主要的不同点是Web API上的操作并不返回视图,而是返回数据。

解决方案资源管理里右击 ValuesController, 选择”删除“直接把他删掉。

如下所示,添加一个新的控制器:

解决方案资源管理里,右击 Controllers 目录,选择”添加“,”控制器“:




在”添加控制器“向导中,将控制器命名为 "TestController"。”模板“下拉框中,选择”空API控制器“。然后点”添加“。下面是ApiController部分的代码:

/// <summary>/// Test模块API/// URI:/Api/Test/// </summary>public class TestController : ApiController{/// <summary>/// User Data List/// </summary>private readonly List<Users> _userList = new List<Users>{new Users {UserID = 1, UserName = "zzl", UserEmail = "bfyxzls@sina.com"},new Users {UserID = 2, UserName = "Spiderman", UserEmail = "Spiderman@cnblogs.com"},new Users {UserID = 3, UserName = "Batman", UserEmail = "Batman@cnblogs.com"}};/// <summary>/// 得到列表对象/// </summary>/// <returns></returns>public IEnumerable<Users> Get(){return _userList;}/// <summary>/// 得到一个实体,根据主键/// </summary>/// <param name="id"></param>/// <returns></returns>public Users Get(int id){return _userList.FirstOrDefault(i => i.UserID == id);}/// <summary>/// 添加/// </summary>/// <param name="form">表单对象,它是唯一的</param>/// <returns></returns>public Users Post([FromBody] Users entity){_userList.Add(entity);return entity;}/// <summary>/// 更新/// </summary>/// <param name="id">主键</param>/// <param name="form">表单对象,它是唯一的</param>/// <returns></returns>public Users Put(int id, [FromBody]Users entity){var user = _userList.FirstOrDefault(i => i.UserID == id);if (user != null){user.UserName = entity.UserName;user.UserEmail = entity.UserEmail;}return user;}/// <summary>/// 删除/// </summary>/// <param name="id">主键</param>/// <returns></returns>public void Delete(int id){_userList.Remove(_userList.FirstOrDefault(i=>i.UserID==id));}}



结束语

REST 描述了一个架构样式的互联系统(如 Web 应用程序)。REST 约束条件作为一个整体应用时,将生成一个简单、可扩展、有效、安全、可靠的架构。由于它简便、轻量级以及通过 HTTP 直接传输数据的特性,RESTful Web 服务成为基于 SOAP 服务的一个最有前途的替代方案。用于 web 服务和动态 Web 应用程序的多层架构可以实现可重用性、简单性、可扩展性和组件可响应性的清晰分离。Ajax 和 RESTful Web 服务本质上是互为补充的。开发人员可以轻松使用 Ajax 和 RESTful Web 服务一起创建丰富的界面。
0 0
原创粉丝点击