博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RESTful风格化
阅读量:4709 次
发布时间:2019-06-10

本文共 2575 字,大约阅读时间需要 8 分钟。

RESTful Web Service介绍

Roy Thomas Fielding博士2000年提出的

REST是英文Representational

State Transfer的缩写

表象化状态转变 或者 表述性状态转移

REST是Web服务的一种架构风格

使用HTTP、URI等广泛流行的标准和协议

轻量级、跨平台、跨语言的架构设计。

img

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

……

原来的方式

GET方法,根据用户id****获取数据

User POST****方法,用户修改

User POST****方法,用户新增

GET/POST方法,用户根据id****删除

RESTful

[]( {id})[ {id}]( {id}) GET方法,根据用户id****获取数据

PUT****方法,用户修改

POST****方法,用户新增

DELETE方法,用户根据id****删除

开发的接口,web服务更加的简洁

REST接口定义

img

幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。

安全性:对该REST接口访问,不会使服务器端资源状态发生改变。

最佳实践

最佳实践:REST接口设计

• URL的组成

– 网络协议(http、https)

– 服务器地址

– 接口名称

– 参数列表

• URL定义限定

– 不要使用大写字母

– 使用中线 - 代替下划线 _

– 参数列表应该被encode过

最佳实践:响应设计

Content body 仅仅用来传输数据

数据要做到拿来就可用的原则,不需要“拆箱”的过程

用来描述数据或者请求的元数据放Header中

img

img

http响应状态码

img

SpringMVC实现RESTful服务

SpringMVC原生态的支持了REST风格的架构设计。

所涉及到的注解:

@RequestMapping

@PathVariable

@ResponseBody

ResponseEntity

……

RESTful风格开发商品接口

根据RESTful风格,编写商品功能的增删改查接口

编写商品查询接口

在ItemInterfaceController编写

@Controller@RequestMapping("item/interface")public classItemInterfaceController {
@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 publicResponseEntity
queryItemById(@PathVariable("id") Long id) {
try {
Item item = this.itemService.queryById(id); // 查询成功,响应的状态码应为200 // 可以设置HttpStatus枚举的OK // returnResponseEntity.status(HttpStatus.OK).body(Item); // 也可以使用ok()方法,效果和上面是一样的 returnResponseEntity.ok().body(item); } catch (Exception e) {
// TODO Auto-generated catch block e.printStackTrace(); } // 如果有异常,设置状态码为500 returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); }}

使用谷歌浏览器测试工具测试

img

img

转载于:https://www.cnblogs.com/GitBoy/p/11093755.html

你可能感兴趣的文章
centos设置中文输入法无效的解决办法
查看>>
深度学习(一)-------算法岗面试题
查看>>
Hibernate Criteria Restrictions
查看>>
vue bus组件传值
查看>>
【刷题】LOJ 6006 「网络流 24 题」试题库
查看>>
《团队-科学计算器-模块测试过程》
查看>>
virtualenv 的使用简介
查看>>
html文档加载顺序简单理解
查看>>
Swift Perfect 基础项目
查看>>
书单BookList
查看>>
字典(Trie树)
查看>>
查看cpu 温度
查看>>
Unity 中使用预编译指令区分平台
查看>>
论坛项目感想
查看>>
WordPress版微信小程序3.5版发布
查看>>
sicily 1198 Substring
查看>>
Servlet 是否线程安全
查看>>
第二次冲刺(每天更新)
查看>>
Knockout应用开发指南之入门介绍
查看>>
转:国内智能音箱的隐忧:国外拼价格,国内又如何?
查看>>