RESTful风格化
RESTful Web Service介绍
Roy Thomas Fielding博士2000年提出的
REST是英文Representational
State Transfer的缩写
表象化状态转变 或者 表述性状态转移
REST是Web服务的一种架构风格
使用HTTP、URI等广泛流行的标准和协议
轻量级、跨平台、跨语言的架构设计。
REST到底是什么?
REST是一种设计风格。它不是一种标准,也不是一种软件,而是一种思想。
REST通常基于使用HTTP,URI,和XML,JSON以及HTML这些现有的广泛流行的协议和标准。
RESTful是什么
RESTful对应的中文是 REST式的。
RESTful Web Service是一种常见的REST的应用,是遵守了REST风格的web服务。
两种主要的web服务
JAX-RS
RESTful Web Service
JAX-WS Web Service
REST 架构的主要原则
网络上的所有事物都可被抽象为资源(Resource)
每个资源都有一个唯一的资源标识符(Resource
Identifier)
同一资源具有多种表现形式(xml、json等)
对资源的各种操作不会改变资源标识符
所有的操作都是无状态的(Stateless)
符合REST原则的架构方式即可称为RESTful
无状态性
无状态性使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前
Request,而不必了解前面
Request 的历史。
从而可以更容易地释放资源。
让服务器充分利用
Pool 技术来提高稳定性和性能。
资源操作
GET: 获取一个资源
POST: 创建一个新的资源
PUT: 修改一个资源的状态
DELETE :删除一个资源
资源展现
XML
JSON
……
原来的方式
http://127.0.0.1/user/queryUser/{id} GET方法,根据用户id****获取数据
http://127.0.0.1/user/updateUser POST****方法,用户修改
http://127.0.0.1/user/saveUser POST****方法,用户新增
http://127.0.0.1/user/deleteUser/{id} GET/POST方法,用户根据id****删除
RESTful
[http://127.0.0.1/user/](http://127.0.0.1/user/ {id})[ {id}](http://127.0.0.1/user/ {id}) GET方法,根据用户id****获取数据
http://127.0.0.1/user/ PUT****方法,用户修改
http://127.0.0.1/user/ POST****方法,用户新增
http://127.0.0.1/user/{id} DELETE方法,用户根据id****删除
开发的接口,web服务更加的简洁
REST接口定义
幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。
安全性:对该REST接口访问,不会使服务器端资源状态发生改变。
最佳实践
最佳实践:REST接口设计
• URL的组成
– 网络协议(http、https)
– 服务器地址
– 接口名称
– 参数列表
• URL定义限定
– 不要使用大写字母
– 使用中线 - 代替下划线 _
– 参数列表应该被encode过
最佳实践:响应设计
Content body 仅仅用来传输数据
数据要做到拿来就可用的原则,不需要“拆箱”的过程
用来描述数据或者请求的元数据放Header中
http响应状态码
SpringMVC实现RESTful服务
SpringMVC原生态的支持了REST风格的架构设计。
所涉及到的注解:
@RequestMapping
@PathVariable
@ResponseBody
ResponseEntity
……
RESTful风格开发商品接口
根据RESTful风格,编写商品功能的增删改查接口
编写商品查询接口
在ItemInterfaceController编写
@Controller
@RequestMapping("item/interface")
public class
ItemInterfaceController {
@Autowired
private ItemService itemService;
// http://manager.taotao.com/rest/item/interface/{id}
/**
* 根据id查询用户
*
* @param id
* @return 返回的类型是ResponseEntity,泛型声明为需要返回的数据类型
*/
@RequestMapping(value = "{id}", method =
RequestMethod.GET)
// 返回的是ResponseEntity或者加上@ResponseBody注解的效果是一样的,任选其一即可,也可以都设置。
// @ResponseBody
public
ResponseEntity<Item> queryItemById(@PathVariable("id") Long id) {
try {
Item item = this.itemService.queryById(id);
// 查询成功,响应的状态码应为200
// 可以设置HttpStatus枚举的OK
// return
ResponseEntity.status(HttpStatus.OK).body(Item);
// 也可以使用ok()方法,效果和上面是一样的
return
ResponseEntity.ok().body(item);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 如果有异常,设置状态码为500
return
ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
使用谷歌浏览器测试工具测试
RESTful风格化的更多相关文章
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- ASP.NET CORE系列【五】webapi整理以及RESTful风格化
介绍 什么是RESTful? 这里不多做赘述,详情请百度! 哈哈,本来还想巴拉巴拉介绍一些webapi, RESTful的, 还是算了,咱们直接上干货!(原因是懒!哈哈) 使用 以前使用过mvc的人 ...
- 十 Restful风格
1 restful风格化,url上的参数通过{}点符绑定,RequestMapping("item/{id}") 2 点位符参数名与方法参数名不一致时,通过@PathVariabl ...
- Restful资源文章
理解RESTful架构 RESTful API设计指南 RESTful架构详解 NodeJs的RESTful API
- 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别
接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...
- (转载) RESTful API 设计指南
作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...
- angular中使用ngResource模块构建RESTful架构
ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...
- Linux学习日记-WCF RestFul的部署(三)
一.关于WCF 的部署 默认的wshttp风格的wcf是很容易部署上去的,但是这里给个建议尽量不要使用WCF的配置文件去部署尽管 我们都已经很熟悉了,在使用配置文件你会发现各种蛋疼的问题. 二.WCF ...
- Node.js实现RESTful api,express or koa?
文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...
随机推荐
- 五分钟学Java:打印Java数组最优雅的方式是什么?
在逛 Stack Overflow 的时候,发现了一些访问量像安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...
- 史上最全CentOS6离线安装部署Cloudera Manager5.9.3
史上最全CentOS6离线安装部署Cloudera Manager5.9.3
- [Python] Tkinter的食用方法_02_LabelFrame RadioButton CheckButton
#开始 Python的话 我是看的小甲鱼的视频 所以代码也是小甲鱼的修改版 本博客这里只是学习记录 小甲鱼是个很棒的老师,虽然经常飙车.... #第一个代码 from tkinter import * ...
- JS中的 '+' 号
当用作单目操作符的时候,+操作符不会对Number类型产生影响.但如果应用在字符串类型上,会将其转换为数字: var a = 25;a =+ a; //对a值没有影响console.log(a); / ...
- VMware15下载、安装、激活
1.VMware15下载 链接:https://pan.baidu.com/s/1bI8LReRY-5k81O3rrNgg-A 提取码:6c03 2.VMware15安装 3.VMware15激活
- 6.Python字符串
#header { display: none !important; } } #header-spacer { width: 100%; visibility: hidden; } @media p ...
- LLC半桥谐振变换器调试记录
1.判断二极管是否击穿 2.判断mos管是否烧坏 直接用声音档,发出响声说明击穿了 3.测试二极管的正负极方法 将万用表调到二极管档 1.信号发生芯片周围的电阻 2.反馈部分的电阻 3.实验准备部分: ...
- DataFrame loc和iloc的区别
loc loc是select by label(name) loc函数是选择dataframe中那一行的index == k的 iloc loc是select by position loc函数是选择 ...
- Fizz Buzz in tensorflow
code from keras.layers.normalization import BatchNormalization from keras.models import Sequential f ...
- [蓝桥杯2017初赛]Excel地址
题目描述 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,.... 当然Excel的最 ...