restful风格的webservice开发之概念准备篇
理解restful:
什么是rest,rest是Representational State Transfer的缩写,翻译过来就是“表现层状态转化”。这里有点不准确,其实rest省略了主语
表现层指的是资源的表现层。在这里所谓的资源指的是互联网上的一个实体,一个具体的信息。比如作为交互的一个文本,一段个人信息,一张图片等等。。。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI,要获取这个资源,访问它的URI就可以
,因此URI就成了每一个资源的地址或独一无二的识别符。
那么什么是表现层?
资源作为一个实体可以有多种表现形式。比如一张文字,可以用txt表示,也可以用xml和json来表示,甚至可以用2进制流来表示。当我们用
URI这个定位符对资源进行互动的时候,资源需要以一种确定的的表现形式来交互这种表现形式就是表现层,资源的具体表现形式(即资源用什么方式传播),
应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。举个栗子,当我要传一个人的信息的时候
我可以把这个人的信息封装成一个json然后通过uri传给服务端。那么这时候json就是个人信息的表现层。
状态转化:
理解了上面的资源 和资源的表现层,再来理解这个定义就很好理解了。访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,
势必涉及到数据和状态的变化,这个过程就是状态转化。举个栗子,小明在某个网站进行了一次注册。要把个人信息通过类似xx/postUser的uri
来完成注册,在这个过程中小明输入的个人信息(资源) 通过一种传输方式,比如json(资源的表现层)通过资源的定位符uri传给了服务器
服务器解析json然后存入数据库(这里还是资源,只不过状态变了,变成存储在硬盘中的数据)。这个过程就是状态转化,很明显可以看出
这种转化是建立在表现层上的(这里是json)。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,
四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),
PUT用来更新资源,DELETE用来删除资源。
总结一下:
1、uri表示一种资源(或者说对资源的操作?)
2、C/S之间的的交互是通过资源的表现层(也可以理解为传输方式)来传递的。
3、客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
那么restful和soap的区别是什么,优缺点是什么?
这里不在介绍soap网上一大堆的资料,只谈两者的优缺点。两者最根本的区别就是soap协议是重量级的复杂的协议,而REST是一种轻量级
的web service架构风格其实现和操作比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,
性能、效率和易用性上都优于SOAP协议。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、
POST、PUT和DELETE方法,这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
REST架构尤其适用于完全无状态的CRUD(Create、Read、Update、Delete,创建、读取、更新、删除)操作。当然soap也有其独到的一面
不做过多介绍和本文没多大关系。
具体见http://blog.sina.com.cn/s/blog_493a845501012566.html
restful风格的webservice开发之概念准备篇的更多相关文章
- 用cxf开发restful风格的WebService
我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...
- SpringMVC实现Restful风格的WebService
1.环境 JDK7 MyEclipse2014 tomcat8 maven 3.3.3 spring4.1.4 2.创建maven工程 使用MyEclipse创建maven工程的方式可以参考这篇博文( ...
- 使用webpy创建一个简单的restful风格的webservice应用
下载:wget http://webpy.org/static/web.py-0.38.tar.gz解压并进入web.py-0.38文件夹安装:easy_install web.py 这是一个如何使用 ...
- SpringBoot RestFul风格API接口开发
本文介绍在使用springBoot如何进行Restful Api接口的开发及相关注解已经参数传递如何处理. 一.概念: REST全称是Representational State Transfer,中 ...
- Restful风格API接口开发springMVC篇
Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...
- django框架实现restful风格的API开发
RESTful风格的要求:https://www.cnblogs.com/chichung/p/9933116.html 利用django原生的框架直接做RESTful的API开发是怎样的呢?感受一下 ...
- Android Metro风格的Launcher开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
- IDEA java开发 Restful 风格的WebService
官网:https://www.jetbrains.com/help/idea/restful-webservices.html 1.在IntelliJ中创建新项目,选择Java Enterprise ...
- 使用laraval框架和前端完成restful风格的请求对接(这里只是讨论restful的概念)
现在,在开发中restful风格的api是比较流行的,尤其是在前后端分离的架构中. 这些东西这一下这篇文章中说的很详细:RESTful接口设计原则和优点 下面,我们来讨论如何使用laraval和前端完 ...
随机推荐
- HIVE json格式数据的处理
今天要处理一个以json格式存储的数据,想要直接把json的各个项的数据存入HIVE表中. HIVE直接读入json的函数有两个: (1)get_json_object(string json_str ...
- C++11原子操作性能测试
测试结论是发现C++11原子操作在性能上,比以往用到的InterlockedIncrement或__sync_add_and_fetch性能上慢了1倍左右. 另外补充一点,在对原子变量进行比较的时候, ...
- centos7 显示中文乱码
(1)# vi /etc/locale.conf LANG="en_US.UTF-8" (2)# vi /etc/sysconfig/i18n LANG="zh_CN.U ...
- angular-utils-pagination 使用案例
angular-utils-pagination是基于angular,bootstrap,jquery的一个分页插件,详细介绍以及使用方法参照: Git:https://github.com/mich ...
- strcmp() Anyone?
uva11732:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...
- gcc编译动态和静态链接库
我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而是 ...
- C# 实现文件或目录复制到指定目录
public void CopyFilesToDirKeepSrcDirName(string srcPath, string destDir) { if (Directory.Exists(srcP ...
- DateTime用法二
任何项目,难免会碰到DateTime的显示问题,.net框架虽提供丰富多样的显示方法,但我很少使用,因老忘记细节,每次都要纠结到底月份在前还是年份在前:日期分隔符到底是“/”,还是“\”,还是“-”等 ...
- CSU 1160 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示
题目链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82974#problem/A 解题思路: 将16进制的表示方法列在一个数组里面 ...
- Swift基础语法学习总结一
1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型,几乎所有类型都是可打印的. ...