这节课终于公布了作业,共有两个选项,A则是偏向于云迁移设计,B则是偏向于网页开发。目前是确定了选择A方案。
而这节课的内容又是一大堆内容,又是念PPT类型,细节基本不讲。
1. Web service architecture: traditional and RESTful
2. Data description language: XML and JSON
3. SOAP
4. WSDL
5. JSON Schema
6. Developing Restful Web APIs
主要是是将两种网页服务的架构,传统的和RESTFul
那么这两种服务的区别是什么?
简单的谷歌查了一下,两者都是通过HTTP作为传输协议,而 web services则是某种基于XML的RPC协议的专用词汇。以SOAP为例,一个RPC call就是把一个XML文档post到某个URL下,这个xml文档里写明我要调用的函数名和参数。服务端会返回一个xml把结果返回。这样的设计是把HTTP当传输层,可以把传输层替换成其他协议只要能在客户端服务端之间传输xml就可以。
SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。但是随着SOAP作为WebService的广泛应用,不断地增加附加的内容,使得现在开发人员觉得SOAP很重,使用门槛很高。在SOAP后续的发展过程中,WS-*一系列协议的制定,增加了SOAP的成熟度,也给SOAP增加了负担。
而REST是完全不同的思路,它充分利用了HTTP协议的4个主要verb把RPC操作分成4类:
- GET:获取资源
- POST:创建资源
- PATCH:修改资源
- DELETE:删除资源
核心就是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性,为什么这么说,因为RESTful是无状态的,无状态是指任意一个web请求必须完全与其他请求隔离,是独立的,当请求端提出请求时,请求本身包含了这一请求的全部信息,这个约束提高系统的可伸缩性,可见性,可靠性。无状态优势就是在调用接口,操作资源的时候,可以不考虑上下文,不用考虑当前状态,降低复杂度。
所以简单的增删改查服务可以用RESTFul,而复杂一点的比如银行转账业务之类的就还得用传统的。
那么先了解一下两种结构性语言,XML 和JSON
XML是一种标识语言,用来结构化信息,标识语言就是设定一种符号放在文本两侧,XML允许用户创建自定义的标识。除此之外,XML比较简单易用,容易扩展,并且是开放性的,也有很多软件工具可以用。
我们知道传统的网页就是使用HTML,这种语言对于各种标识有着严格的规定,比如<H1>, <P>, <BODY>, <TD> ...,时至今日,W3C仍然在继续扩充该语言。而XML不会对标识,语义做严格的规定,全部都是自定义的。语义由处理该XML表格的程序界定。
下图就是两者的对比,可以看到XML的更加容易懂,也不用自己硬背。
下图可以看到一个典型的XML语言,可以说比较容易看懂
仔细看一下,XML还是有一些基本的要求,比如两侧都有自定义的标识,以及标识名称。结尾的标识多了一个/。所有的XML文档必须要格式良好,特别要注意XML是要区分大小写的,<name>, <NAME>,
<Name>不是一回事。所以每一个元素都要包括起始标识,内容,终止标识。
另外要注意的是,XML允许添加属性,例如<address type="permanent"> ... </address>,并且可以添加不止一条属性在内。
另外没有任何内容的空元素也是可以的,比如<applause /> -- same as <applause>,</applause>
XML里的内容可以是各种形式,比如数据,参考,各种等等
– Elements
– Data (Typical case)
– Character references 字符串参考 可以使用除了XML要用的(比如<>&)任何符号,字符串参考主要是用在代表一些不能从输入设备中获取的内容,比如土耳其文字处理器无法显示日语字符,因此可以使用某些十进制,十六进制数字来代表,比如©,下面就是两种方式来代表 该符号
– Decimal: &#DDDDD; (1 to 5 digits), e.g., ©
– Hexadecimal: &#xHHHH; (1 to 4 digits), e.g., ©
– Both the above represent ©
– Entity references 对象参考 可以放入到元素/属性中,开头要以&,结尾要有;比如&下图为预定义的对象参考,同时也可以自己设计几个
– Comments 和HTML类似,尽量简短,不要琐碎,例如下面例子
<!-- This is a comment -->
– Processing instructions 用于处理特殊进程,语法是<? Some processing instruction ?>,比如下面例子
<?xml-stylesheet href=“style.css” type=“text/css”?>
<? Setup-templates ?>
– CDATA Sections 用于防止解析器混乱,下面的例子就是防止XML解析器把HTML的标识符弄成自己的
<![CDATA[<html><body>Content</body></html>]]>
XML文档包括了可选的序言,根元素主题,以及可选的结语,如下图所示
prolog 和epilog都是可选的,并不重要,但是要注意body的格式,这里必须要了解一定要有一个root元素。上课时候老师讲了很多关于数据结构的东西,但是一定要掌握的就是树结构,XML,JSON,以及Windows等等都是树结构。
root元素是必须要有,并且只能有一个,其他的元素都可以多个,都可以放在root元素里。
元素必须得一对一对闭合状态
而近些年来,使用XML的越来越少,逐渐的变为使用JSON,因为JSON更加的简洁,例如下面的例子,其实用XML也可以实现同样的效果,比如
<name>Chuck</name>等等
下图则是一些JSON的要求限制,不过这些都不重要,我们并不是要学习写代码
SOAP: Simple Object Access Protocol
传统的网页服务就是使用SOAP架构,非常的传统,例如下图,同样也是用的树协议结构。
WSDL: Web Service Description Language
WSDL也是一笔带过,老师嗖嗖嗖的跳转PPT,完毕