基于REST架构的Web Service设计

REST的架构设计

   REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速 度,性能、效率和易用性上都优于SOAP协议。

  REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行 为:Create(创建)、Read(读取)、Update(更新)和Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,即一种 无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。

  REST架构让人们真正理解我们的网 络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,因 此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。这种针对网络应用的设计和开发方式,可以降低开发 的复杂性,提高系统的可伸缩性

  REST的设计准则

  REST架构是针对Web应用而设计的,其目的是为了降低开发的复杂性,提高系统的可伸缩性。REST提出了如下设计准则:

  网络上的所有事物都被抽象为资源(resource);

  每个资源对应一个唯一的资源标识符(resource identifier);

  通过通用的连接器接口(generic connector interface)对资源进行操作;

  对资源的各种操作不会改变资源标识符;

  所有的操作都是无状态的(stateless)。

  使用REST架构

   对于开发人员来说,关心的是如何使用REST架构,这里我们来简单谈谈这个问题。REST不仅仅是一种崭新的架构,它带来的更是一种全新的Web开发过 程中的思维方式:通过URL来设计系统结构。REST是一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。REST有很多成功的使 用案例,著名的Delicious和Flickr都提供基于REST风格的API使用,客户端调用也极其方便,下面是我用ASP写的一个很简单的REST 举例,从中可以看出REST是多么的简单易用。

  客户端代码:

[java]  view plain  copy
  1. Private Function httpGet(url, method, data)  
  2.     Dim xmlhttp  
  3.     Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")  
  4.     xmlhttp.open method, url + "?" + data, False  
  5.     xmlhttp.setRequestHeader "Content-Type""application/x-www-form-urlencoded; charset=UTF-8"  
  6.     xmlhttp.setRequestHeader "Content-Length", Len(data)  
  7.     xmlhttp.send (Null)  
  8.     If (xmlhttp.Status = 200) Then httpGet = xmlhttp.responseText  
  9.     Set xmlhttp = Nothing  
  10. End Function  
  11.   
  12. Private Function httpPost(url, method, data)  
  13.     Dim xmlhttp  
  14.     Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")  
  15.     xmlhttp.open method, url, False  
  16.     xmlhttp.setRequestHeader "Content-Type""application/x-www-form-urlencoded; charset=UTF-8"  
  17.     xmlhttp.setRequestHeader "Content-Length", Len(data)  
  18.     xmlhttp.send (data)  
  19.     If (xmlhttp.Status = 200) Then httpPost = xmlhttp.responseText  
  20.     Set xmlhttp = Nothing  
  21. End Function  
  22.   
  23. Private Function httpPut(url, method, data)  
  24.     Dim xmlhttp  
  25.     Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")  
  26.     xmlhttp.open method, url, False  
  27.     xmlhttp.setRequestHeader "Content-Type""application/x-www-form-urlencoded; charset=UTF-8"  
  28.     xmlhttp.setRequestHeader "Content-Length", Len(data)  
  29.     xmlhttp.send (data)  
  30.     If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then  
  31.         response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText  
  32.     Else  
  33.         response.write xmlhttp.responseText  
  34.     End If  
  35.     If (xmlhttp.Status = 200) Then httpPut = xmlhttp.responseText  
  36.     Set xmlhttp = Nothing  
  37. End Function  
  38.   
  39. Private Function httpDelete(url, method, data)  
  40.     Dim xmlhttp  
  41.     Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")  
  42.     xmlhttp.open method, url + "?" + data, False  
  43.     xmlhttp.setRequestHeader "Content-Type""application/x-www-form-urlencoded; charset=UTF-8"  
  44.     xmlhttp.setRequestHeader "Content-Length", Len(data)  
  45.     xmlhttp.send (Null)  
  46.     If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then  
  47.         response.write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText  
  48.     Else  
  49.         response.write xmlhttp.responseText  
  50.     End If  
  51.     If (xmlhttp.Status = 200) Then httpDelete = xmlhttp.responseText  
  52.     Set xmlhttp = Nothing  
  53. End Function  
  54.   
  55. response.write httpPost("http://localhost/rest/service.asp""POST""do=POST")  
  56. response.write httpGet("http://localhost/rest/service.asp""GET""do=GET")  
  57. response.write httpPut("http://localhost/rest/service.asp""PUT""do=PUT")  
  58. response.write httpDelete("http://localhost/rest/service.asp""DELETE""do=DELETE")  


 

  服务端代码:

[java]  view plain  copy
  1. Response.Write Request.ServerVariables("REQUEST_METHOD")  
  2. If (Request.ServerVariables("REQUEST_METHOD")="GET") Then  
  3.  Response.Write "DO GET" + Request("do")  
  4. ElseIf (Request.ServerVariables("REQUEST_METHOD")="POST") Then  
  5.  Response.Write "DO POST" + Request("do")  
  6. ElseIf (Request.ServerVariables("REQUEST_METHOD")="PUT") Then  
  7.  Response.Write "DO PUT" + Request("do")  
  8. ElseIf (Request.ServerVariables("REQUEST_METHOD")="DELETE") Then  
  9.  Response.Write "DO DELETE" + Request("do")  
  10. End if  

   需要注意的是,IIS服务器默认是不支持ASP文件的PUT和DELETE操作,默认会返回“403 - Forbidden”错误,因此需要修改IIS的设置,修改方法是:管理根据-IIS信息服务器-网站-属性-主目录-应用程序配置-配置-映射,选择 ASP - 编辑 - 修改为全部动作。

       以上为本人摘自网上,尽管是.NET的,但感觉无论针对哪种语言,这篇文章都有利于我们对REST架构及基于REST的Web Service更好的了解和学习,特意摘来与大家分享一下!


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值