`

基于REST架构的Web Service设计

 
阅读更多

转自:http://www.williamlong.info/archives/1728.html

先前我曾经介绍过利用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 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》这本书。

分享到:
评论

相关推荐

    基于Express的违章查询REST Web Service设计与实现.pdf

    【基于Express的违章查询REST Web Service设计与实现】 在当今的互联网时代,交通管理服务的信息化已经成为提升公共服务质量的关键。违章查询作为一项重要的便民服务,允许驾驶人方便地在线查看和处理违章信息。...

    基于Express的违章查询REST Web Service设计与实现.docx

    【基于Express的违章查询REST Web Service设计与实现】 在当今的互联网时代,交通违章查询服务已经成为交通管理部门不可或缺的一部分,方便驾驶人随时随地获取违章信息。随着移动互联网的快速发展,各种智能设备...

    REST服务构建的web应用的优势和不足

    基于 REST 服务(RESTful Service)的 Web 应用系统设计任务主要包括:识别并设计 REST 风格的服务,采用面向服务的思想进行 REST 服务集成。采用这种方法设计的 Web 应用系统能够结合 REST 风格和面向服务思想的...

    MyEclipse REST Web Service 简单的实现例子

    在当今互联网技术日新月异的时代,REST(Representational State Transfer)架构风格已成为构建Web服务的重要方式,它强调资源的表述和状态转换,简单易用且具有高度可扩展性。MyEclipse,作为一款强大的Java集成...

    Jersey Java规范下REST风格Web Service开发框架

    JAX-RS 规范(JSR 311)旨在简化 RESTful Web Service 的开发过程,并且通过一套统一的标准使得开发者能够更加高效地构建基于 REST 架构的应用程序。Jersey 作为 JAX-RS 规范的参考实现之一,不仅提供了一套完整的 ...

    web service ppt

    REST(Representational State Transfer)是一种与SOAP不同的Web Service设计风格,它强调资源的表述和状态转换,通常使用JSON作为数据交换格式,比SOAP更简洁,更易于理解和实现。XML-RPC(XML Remote Procedure ...

    4个Web Service架构项目源码.rar

    Web Service架构项目源码是开发者学习和理解Web Service技术的重要资源。本压缩包包含四个Web Service架构项目,每个项目都可能涉及不同的技术和实现方式,旨在帮助学习者深入理解Web Service的工作原理及其在实际...

    解析Restful Web Service 架构

    RESTful Web服务遵循REST(Representational State Transfer)原则,这是一种设计网络应用的架构风格。RESTful Web服务强调使用标准的HTTP方法(如GET、POST、PUT、DELETE)来表达客户端对服务器的操作,并将作用域...

    基于RESTful Web Service的数据资源交换系统设计与实现.pdf

    综上所述,基于RESTful Web Service的数据资源交换系统设计与实现,通过采用RESTful架构、JSON作为数据交换格式,以及Spring Cloud作为微服务框架,可以有效地降低系统开发复杂度,提高系统可扩展性和数据资源管理...

    REST与SOAP WEB SERVICE的区别1

    【REST与SOAP WEB SERVICE的区别】 在Web服务领域,REST(Representational State Transfer)和SOAP(Simple Object Access Protocol)是两种常见的通信方式,它们各有特点,适用于不同的场景。REST以其简洁和直观...

    Eclipse下基于Axis2的Web Service平台搭建与使用

    2. **Axis2**:Apache Axis2是Java平台上的Web Service引擎,它是Apache Axis1的下一代产品,提供了更高效、更灵活的服务架构。Axis2允许开发者创建、部署和管理Web Services,并且支持多种协议如SOAP、REST等。 3....

    mes上传基于C#上传web service示例源码

    首先,Web服务通常是基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)架构的。SOAP是基于XML的协议,用于在分布式环境中交换结构化信息,而REST则更为轻量级,通常用于HTTP协议...

    REST Web Service开发实践

    在当今的软件开发领域,REST(Representational State Transfer)Web服务已经成为构建分布式系统的重要方式,因其简洁、灵活且易于理解的架构风格而备受青睐。RESTful API设计模式允许通过HTTP协议来操作资源,从而...

    XML Web Service开发

    随着技术的发展,XML Web Service已演变为更高级的概念,如SOA(Service-Oriented Architecture,面向服务架构),微服务等。因此,不断学习新的技术和最佳实践是必要的。 总之,XML Web Service开发是一个涉及多个...

    WCF WebHttp REST Entity Service

    **WCF WebHttp REST Entity Service** 是一个基于Windows Communication Foundation (WCF) 技术的Web服务实现,它专门设计用于构建RESTful风格的应用程序。REST(Representational State Transfer)是一种架构风格,...

    REST架构的网络服务

    ### REST架构的网络服务知识点概览 #### 一、REST架构概述 REST(Representational State Transfer)是一种软件架构风格,最初由Roy Fielding在他的博士论文中提出,旨在为分布式超媒体系统提供一种设计理念。REST...

    Web Service开发指南

    随着微服务架构的兴起,Web Service在分布式系统中的角色日益重要。然而,也面临着性能、可扩展性和复杂性的挑战。新的技术,如GraphQL和gRPC,正试图改进现有Web Service的局限性。 总的来说,“Web Service开发...

    Web Service入门例子

    1. 定义:Web Service是一种通过标准协议(如SOAP、REST)在互联网上提供和消费服务的技术。它以XML(可扩展标记语言)为基础,使得不同系统间的通信变得更加简单和可靠。 2. 架构:Web Service的核心组件包括WSDL...

Global site tag (gtag.js) - Google Analytics