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 httpPost("http://localhost/rest/service.asp", "POST",
"do=POST")
response.write httpGet("http://localhost/rest/service.asp", "GET",
"do=GET")
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》这本书。
分享到:
相关推荐
中文名: REST架构的网络服务 原名: RESTful Web Services 作者: Leonard Richardson Sam Ruby 资源格式: PDF 版本: 英文文字版/更新源代码 出版社: O'Reilly书号: 978-0596529260发行时间: 2007年05月15日 地区: ...
基于REST架构的Web Service设计,REST服务Post创建以及调用小例子
本文展示了Http 协议的强大能力, 如何定义什么是Restful Web Service 架构以及以当今RPC 式Web 服务的对比,并解析了Restful web Service 架构的四个特征:可寻址性、无状态性、连通性和统一接口。
它不同于传统的SOAP Web Service和Rest Web Service这些Web Service 技术型框架,Rop是一个应用型的Web Service平台框架,它不但可以方便快捷地开发一个个Web Service服务,还提供了服务平台领域问题的整体解决方案...
rest 架构服务端代码,注释详细,简单易懂,仅供新手参考学习。
随着互联网的普及,互联网应用(尤其移动互联网应用)已经成为主流,“SOAP之重”已经越来越令我们无法承受,于是采用REST架构风格并直接采用Web进行通信的轻量级Web Service走进了我们的视野并登堂入室。...
基于REST的软件体系结构风格(Software Architecture Style)称之...按照REST原则设计的软件、体系结构,通常被称为“REST式的”(RESTful),在本文中以下称之为 RESTful Web服务,以便于和基于SOAP的Web服务区别。
向读者介绍了什么是REST、什么是面向资源的架构(Resource-Oriented Architecture,ROA)、REST式设计的优点、REST式Web服务的真实案例分析、如何用各种流行的编程语言编写Web服务客户端、如何用三种流行的框架...
REST 简介 REST 是英文 Representational ...目前,越来越多的 Web 服务开始采用 REST 风格设计和实现,真实世界中比较著名的 REST 服务包括:Google AJAX 搜索 API、Amazon Simple Storage Service (Amazon S3) 等。
后半部分则偏重于实际项目,包括实现一个完整的Ajax和Web service架构;使用REST定义Web service;处理海量或缓慢或实时数据集;实现一个网络购物车;处理使用Ajax时的回退按钮问题等。阅读本书有助于掌握如何通过将...
它不同于传统的SOAP Web Service和Rest Web Service这些Web Service 技术型框架,Rop是一个应用型的Web Service平台框架,它不但可以方便快捷地开发一个个Web Service服务,还提供了服务平台领域问题的整体解决方案
相比第2版中的内容,Rails 2增加了REST、资源、轻量级web service等新特性。《Web开发敏捷之道:应用Rails进行敏捷Web开发(第3版)》涵盖了这些全新的内容,因此能更好地体现出Rails框架的发展现状。 整体而言,全书既...
结合具有表述性状态转移(REST)风格的 Web Service与开放地理信息联盟(OGC)开放标准规范 ,提出一 种面向资源的 WebGIS架构及其设计方法 .在该架构中 ,为实现信息共享和功能互操作 ,采用 OGC规范作为服务 接口标准 ,...
基于ASP.NET Core Web Service和EntityFramework Core的启动模板 ASP.NET使构建覆盖广泛客户端的服务变得容易,这些客户端包括浏览器和移动设备。 使用ASP.NET,您可以使用相同的框架和模式在同一项目中并排构建...
通过REST风格体系架构,请求和响应都是基于资源表示的传输来构建的。资源是通过全局ID来标识的,这些ID一般使用的是一个统一资源标识符(URI)。客户端应用使用HTTP方法(如,GET、POST、PUT或DELETE)来操作一个或...
介绍了苹果网络、数据交换格式、Web Service、iCloud、定位服务、地图、推送通知、Newsstand、应用内购买、Passbook、以及社交网络编程,还介绍了网络通信设计模式和架构设计。 全书分为5部分:网络基础篇、云服务篇...
PHP中的示例RESTful Web服务 这是一个项目,您可以将其用作模板来创建和运行用PHP编写的新服务。 执行样本服务API 要执行示例服务,请执行以下步骤: 克隆项目 安装依赖项: ./initProject.sh ticketshop 调整....
ADO.NET Data Services Framework 由满足以下条件的模式和库组合而成:支持将数据公开为一项基于 REST(具象状态传输)的灵活数据服务,企业网络内部或整个 Internet 上的 Web 客户端都可以使用该服务。ADO.NET Data...