什么是REST?

什么是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组件来完成这个请求调用,它的代码更加面向对象,下面举例说明一下



 
 
  1. <html>
  2. <head runat="server">
  3. <meta name="viewport" content="width=device-width" />
  4. <title>Web Api Test </title>
  5. <script src="../../Scripts/jquery-1.7.1.min.js"> </script>
  6. <script type="text/javascript">
  7. function add() {
  8. $.ajax({
  9. url: "/api/test/",
  10. type: "POST",
  11. data: { "UserID": 4, "UserName": "test", "UserEmail": "Parry@cnblogs.com" },
  12. success: function(data) { alert( JSON.stringify(data)); }
  13. });
  14. }
  15. //更新
  16. function update(id) {
  17. $.ajax({
  18. url: "/api/test?id=" + id,
  19. type: "Put",
  20. data: { "UserID": 1, "UserName": "moditest", "UserEmail": "Parry@cnblogs.com" },
  21. success: function(data) { alert( JSON.stringify(data)); }
  22. });
  23. }
  24. function deletes(id) {
  25. $.ajax({
  26. url: "/api/test/1",
  27. type: "DELETE",
  28. success: function(data) { alert(data); }
  29. });
  30. }
  31. </script>
  32. </head>
  33. <body>
  34. <div>
  35. <fieldset>
  36. <legend>测试Web Api
  37. </legend>
  38. <a href="javascript:add()">添加(post) </a>
  39. <a href="javascript:update(1)">更新(put) </a>
  40. <a href="javascript:deletes(1)">删除(delete) </a>
  41. <a href="/api/test">列表(Get) </a>
  42. <a href="/api/test/1">实体(Get) </a>
  43. </fieldset>
  44. </div>
  45. </body>
  46. </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类里加入下面的属性:


 
 
  1. namespace HelloWebAPI.Models
  2. {
  3. public class Users
  4. {
  5. public string UserID{ get; set; }
  6. public string UserName { get; set; }
  7. public string UserEmail { get; set; }
  8. }
  9. }



添加控制器


控制器是一个处理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部分的代码:


 
 
  1. /// <summary>
  2. /// Test模块API
  3. /// URI:/Api/Test
  4. /// </summary>
  5. public class TestController : ApiController
  6. {
  7. /// <summary>
  8. /// User Data List
  9. /// </summary>
  10. private readonly List<Users> _userList = new List<Users>
  11. {
  12. new Users {UserID = 1, UserName = “zzl”, UserEmail = "bfyxzls@sina.com"},
  13. new Users {UserID = 2, UserName = “Spiderman”, UserEmail = "Spiderman@cnblogs.com"},
  14. new Users {UserID = 3, UserName = “Batman”, UserEmail = "Batman@cnblogs.com"}
  15. };
  16. /// <summary>
  17. /// 得到列表对象
  18. /// </summary>
  19. /// <returns></returns>
  20. public IEnumerable<Users> Get()
  21. {
  22. return _userList;
  23. }
  24. /// <summary>
  25. /// 得到一个实体,根据主键
  26. /// </summary>
  27. /// <param name=“id”></param>
  28. /// <returns></returns>
  29. public Users Get(int id)
  30. {
  31. return _userList.FirstOrDefault(i => i.UserID == id);
  32. }
  33. /// <summary>
  34. /// 添加
  35. /// </summary>
  36. /// <param name=“form”>表单对象,它是唯一的</param>
  37. /// <returns></returns>
  38. public Users Post([FromBody] Users entity)
  39. {
  40. _userList.Add(entity);
  41. return entity;
  42. }
  43. /// <summary>
  44. /// 更新
  45. /// </summary>
  46. /// <param name=“id”>主键</param>
  47. /// <param name=“form”>表单对象,它是唯一的</param>
  48. /// <returns></returns>
  49. public Users Put(int id, [FromBody]Users entity)
  50. {
  51. var user = _userList.FirstOrDefault(i => i.UserID == id);
  52. if (user != null)
  53. {
  54. user.UserName = entity.UserName;
  55. user.UserEmail = entity.UserEmail;
  56. }
  57. return user;
  58. }
  59. /// <summary>
  60. /// 删除
  61. /// </summary>
  62. /// <param name=“id”>主键</param>
  63. /// <returns></returns>
  64. public void Delete(int id)
  65. {
  66. _userList.Remove(_userList.FirstOrDefault(i=>i.UserID==id));
  67. }
  68. }



结束语


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值