欢迎光临

木子屋

标题: 基于REST架构的Web Service设计

作者: dnawo

日期: 2010-12-14 10:55 PM

分类: Web编程

内容: 先前我曾经介绍过利用Apache Axis实现基于SOAP的Web Service实现技术和相关代码，总的来说，SOAP的Web Service解决方案虽然较为成熟，且安全性较好，但是使用门槛较高，在大并发情况下会有性能问题，在互联网上使用不太普及，因此并不太适合Web 2.0网站服务使用，目前大量的Web 2.0网站使用另外一种解决方案——REST。
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是多么的简单易用。
客户端代码：
复制内容到剪贴板 程序代码<%
Private Function httpGet(url, method, data)
Dim xmlhttp
Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open method, url + "?" + data, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
xmlhttp.setRequestHeader "Content-Length", Len(data)
xmlhttp.send (Null)
If (xmlhttp.Status = 200) Then httpGet = xmlhttp.responseText
Set xmlhttp = Nothing
End Function
Private Function httpPost(url, method, data)
Dim xmlhttp
Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open method, url, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
xmlhttp.setRequestHeader "Content-Length", Len(data)
xmlhttp.send (data)
If (xmlhttp.Status = 200) Then httpPost = xmlhttp.responseText
Set xmlhttp = Nothing
End Function
Private Function httpPut(url, method, data)
Dim xmlhttp
Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open method, url, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
xmlhttp.setRequestHeader "Content-Length", Len(data)
xmlhttp.send (data)
If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
Response.Write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
Else
Response.Write xmlhttp.responseText
End If
If (xmlhttp.Status = 200) Then httpPut = xmlhttp.responseText
Set xmlhttp = Nothing
End Function
Private Function httpDelete(url, method, data)
Dim xmlhttp
Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open method, url + "?" + data, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
xmlhttp.setRequestHeader "Content-Length", Len(data)
xmlhttp.send (Null)
If xmlhttp.Status >= 400 And xmlhttp.Status <= 599 Then
Response.Write " Error Occurred : " & xmlhttp.Status & " - " & xmlhttp.statusText
Else
Response.Write xmlhttp.responseText
End If
If (xmlhttp.Status = 200) Then httpDelete = xmlhttp.responseText
Set xmlhttp = Nothing
End Function
Response.Write httpGet("http://localhost/rest/service.asp", "GET", "do=GET")
Response.Write httpPost("http://localhost/rest/service.asp", "POST", "do=POST")
Response.Write httpPut("http://localhost/rest/service.asp", "PUT", "do=PUT")
Response.Write httpDelete("http://localhost/rest/service.asp", "Delete", "do=Delete")
%>
服务端代码：
复制内容到剪贴板 程序代码<%
Response.Write Request.ServerVariables("REQUEST_METHOD")
If (Request.ServerVariables("REQUEST_METHOD")="GET") Then
Response.Write "DO GET" + Request("do")
ElseIf (Request.ServerVariables("REQUEST_METHOD")="POST") Then
Response.Write "DO POST" + Request("do")
ElseIf (Request.ServerVariables("REQUEST_METHOD")="PUT") Then
Response.Write "DO PUT" + Request("do")
ElseIf (Request.ServerVariables("REQUEST_METHOD")="Delete") Then
Response.Write "DO Delete" + Request("do")
End if
%>
需要注意的是，IIS服务器默认是不支持ASP文件的PUT和Delete操作，默认会返回“403 - Forbidden”错误，因此需要修改IIS的设置，修改方法是：管理根据－IIS信息服务器－网站－属性－主目录－应用程序配置－配置－映射，选择ASP － 编辑 － 修改为全部动作。
关于更多关于REST方面的知识，建议阅读《RESTful Web Services》这本书。

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.605 ms

返回

标题: 基于REST架构的Web Service设计

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.605 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.672 ms

返回