Chapter2,Writing Web Service Clients
Web Services Are Web Sites
Yahoo!提供了RESTful Web Service,用Ruby来调用该服务非常简单:
require 'open-uri'
require 'rexml/document'
require 'cgi'
BASE_URI = 'http://api.search.yahoo.com/WebSearchService/V1/webSearch'
def print_page_titles(term)
term = CGI::escape(term)
xml = open(BASE_URI + "?appid=restbook&query=#{term}").read
document = REXML::Document.new(xml)
REXML::XPath.each(document, '/ResultSet/Result/Title/[]') do |title|
puts title
end
end
print_page_titles(ARGV.join(' '))
Google则还是RPC风格的SOAP,不过最近貌似加上了Ajax风格的Web服务?
既然大家都发布了服务API,我要是使用自己的服务器假设一个伪搜索引擎岂不是很简单?不知道是否侵权哦?
RESTful Web Service非常简单,我们只需用某种编程语言的HTTP客户端库即可
Wrappers, WADL, and ActiveResource
What is WSDL?
WSDL stands for Web Services Description Language
WSDL is written in XML
WSDL is an XML document
WSDL is used to describe Web services
WSDL is also used to locate Web services
WSDL is not yet a W3C standard
What is SOAP?
SOAP stands for Simple Object Access Protocol
SOAP is a communication protocol
SOAP is for communication between applications
SOAP is a format for sending messages
SOAP is designed to communicate via Internet
SOAP is platform independent
SOAP is language independent
SOAP is based on XML
SOAP is simple and extensible
SOAP allows you to get around firewalls
SOAP will be developed as a W3C standard
SOAP类似于HTTP,都是底层通信协议,尤其是SOAP与HTTP、SMTP等绑定时。
而WSDL是描述Web服务的,我们针对一个WSDL文件调用一个Web服务时,底层通信就是遵守SOAP协议的
WADL(Web Application Description Language) is an XML-based file format that provides a machine-readble description
of HTTP-based web applications. These applications are typically RESTful web services.
WSDL用来描述基于SOAP协议的Web Service,而WADL用来描述RESTful Web Service
对不同的RESTful Web Service我们可以使用不同的Wrappers来封装以供调用(如上面的print_page_titles就是一个封装),但是这对不同的
RESTful Web Service不通用,所以WADL的出现就是为了对不同的RESTful Web Service提供一致的描述
ActiveResource则是针对Ruby on Rails写的RESTful Web Service的client端调用封装
del.icio.us: The Sample Application
del.icio.us的Web服务设计不是RESTful的,它始终使用GET方法,而且“add”和“rename”等操作都是嵌在URI中而不是使用HTTP方法
Making the Request: HTTP Libraries
构建Web服务客户端要求HTTP库至少满足以下特性:
支持HTTPS和SSL
支持GET、HEAD、POST、PUT和DELETE
支持程序员自定义PUT或POST请求的entity-body
支持程序员自定义请求的HTTP headers
支持HTTP应答的response code和headers
支持HTTP proxy
Ruby: rest-open-uri、net/http和net/https
Python: httplib2
Java: HttpClient
C#: System.Web.HTTPWebRequest
PHP: libcurl
JavaScript: XMLHttpRequest
Command Line: curl
ActionScript: XML
C: libwww、libcurl
C++: libcurl、cURLpp
Common Lisp: simple-http、AllegroServe
Perl: libwww-perl、Crypt:SSLeay
Processing the Response: XML Parsers
三种XMl Parsers
DOM: document-based、tree-style,读取整个XML文件后再开始解析,可以自由处理任何document内容
SAX: event-based、register callback methods,将document转变为一系列event,按顺序处理每个event,不能在处理中stop
Pull: event-based、一次处理一个event,需要时再pull下一个event,可以在任何时候stop
Ruby: REXML
Python: ElementTree
Java: javax.xml、Xerces、XMLPull
C#: System.Xml.XmlReader
PHP: XmlReader、DOM、SimpleXMl、DOMIT
JavaScript: responseXML
ActionScript: XML
C: Expat、libxml2
C++: Xerces-C++
Common Lisp: SXML
Perl: XML::XPath、XML::SAX::PurePerl、XML::LibXML::Reader
JSON Parsers: Handling Serialized Data
JSON的缺点:
不支持对象图和循环引用(使用外键来处理)
不支持类信息(附加类名)
Ruby: Object#to_json、JSON.parse
dojo: dojo.json
Clients Made Easy with WADL
作者是推荐使用WADL来描述RESTful Web Service,就像WSDL描述SOAP Web Service一样
不过像Rails的REST实现就只是用了简单的Object#to_xml来作为RESTful Web Service的描述,简单至极
分享到:
相关推荐
### 第二章:构建初始框架 —— 奠定应用基础 - **项目结构**:讲解如何组织代码,包括使用不同的命名空间来分离关注点。 - **依赖注入**:介绍如何在 .NET Core 中使用依赖注入容器,例如 Microsoft.Extensions....
RESTful Web Services中文版 1,3,4章 缺第二章和其他章节,源码网无色会在第一时间补齐,敬请关注本页。 本身完整目录: 目录 序.......................................I. --------------------------...
Maven repository.part1 for Java RESTful Web Service实战第二章需要的Mave库
Maven repository.part1 for Java RESTful Web Service实战第二章需要的Mave库
2. **第二章:Servlet** - 学习Servlet的基本概念,了解它如何处理HTTP请求和响应,以及Servlet生命周期和配置。 3. **第三章:JSP** - JSP(JavaServer Pages)用于动态网页生成,讲解JSP语法、EL(Expression ...
### 第二章 Servlet基础 #### 一、Servlet概述 Servlet是一种用Java编写的服务器端程序,主要用于处理客户端的HTTP请求并生成动态Web内容。Servlet由Web服务器或应用服务器托管,并在其内部运行。它们的主要特点...
在本资源中,我们关注的是Java Web服务的构建与运行,这是第二版的教材源代码,涵盖了第1至第4章的内容。Java Web服务是一种基于开放标准的技术,用于创建网络应用程序,尤其是那些能够通过互联网进行交互的应用。...
在本章中,我们将探讨如何使用SpringCloud框架构建一个微服务,特别是一个名为“Message-Service”的示例项目,该服务用于处理消息通知,如短信或电子邮件。这个项目旨在提供一个实践性的学习平台,以帮助理解Spring...
第二章深入探讨了 REST(Representational State Transfer)的概念。REST 是一种软件架构风格,旨在为网络应用程序提供简单而一致的接口。RESTful 设计的核心理念是资源为中心,通过使用 HTTP 协议中的标准方法(如 ...
**第二章 C#程序设计基础** C#是ASP.NET的主要编程语言,具有现代、类型安全和面向对象的特点。学习C#的基础语法,包括变量、数据类型、控制结构、类和对象等,是理解ASP.NET的关键。本章将深入探讨这些基础知识,...
2. **第二章:HTML和服务器控件** - HTML控件与服务器控件的区别 - 常用服务器控件,如Button、Label、TextBox等的使用 - 使用GridView显示和操作数据 - CSS样式和JavaScript在ASP.NET中的应用 3. **第三章:...
**基于WebService数据交换的研究和实现_第五章WSDES系统的设计和实现** 在信息化时代,数据交换成为了企业间、系统间协同工作的重要环节。WebService作为开放的Web标准,为跨平台、跨系统的数据交换提供了可能。本...
### 第二章:SOA架构模式 本章将探讨常见的SOA架构模式,如服务发现、服务代理、服务编排和服务聚合。这些模式帮助设计者在实践中有效地实现SOA,确保系统的可扩展性和灵活性。 ### 第三章:服务接口设计 这一章...
2. **第二章**:Web基础,包括HTML、CSS和JavaScript,这些都是构建Web应用的基础,也是理解Java EE中Servlet和JSP的前提。 3. **第三章**:Servlet技术,介绍如何使用Servlet处理HTTP请求和响应,它是Java EE中...
#### 第二章:简单的Web服务 ##### SOAP概述 SOAP是一种基于XML的消息交换协议,用于在应用程序之间交换结构化信息。SOAP消息通常由四个部分组成:信封(Envelope)、头部(Header)、主体(Body)和故障(Fault)...
第二章 JavaBean JavaBean是Java语言中的一种软件组件模型,主要用于构建可重用的UI组件。在J2EE环境中,JavaBean通常作为数据容器,存储和传递业务逻辑中的数据。本章将介绍JavaBean的生命周期、属性、方法和事件,...
第二篇“Web Form”深入介绍了使用Web Forms构建Web页面的技术。Web Forms是ASP.NET早期的核心,通过控件和事件驱动的方式模拟桌面应用程序的开发体验。这一章会讲述如何创建和使用服务器控件,处理用户交互,以及...
光盘源码提供了从第二章到第十九章的所有示例代码,为学习者提供了实际操作和理解Spring框架的宝贵资源。 Spring框架是Java平台上的一个核心组件,它以依赖注入(Dependency Injection, DI)和面向切面编程(Aspect...
最后,第6章“WEB SERVICE及应用”涉及现代软件开发中的Web服务技术。本章将阐述Web服务的原理,如SOAP和RESTful API,以及如何使用XML和JSON进行数据交换。此外,还会探讨Web服务的集成、安全性和测试策略。 通过...