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 技术来提高稳定性和性能。

资源操作

http://taotao.com/item/

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编写

  1. @Controller
  2. @RequestMapping("item/interface")
  3. public class
  4. ItemInterfaceController {
  5. @Autowired
  6. private ItemService itemService;
  7. // http://manager.taotao.com/rest/item/interface/{id}
  8. /**
  9. * 根据id查询用户
  10. *
  11. * @param id
  12. * @return 返回的类型是ResponseEntity,泛型声明为需要返回的数据类型
  13. */
  14. @RequestMapping(value = "{id}", method =
  15. RequestMethod.GET)
  16. // 返回的是ResponseEntity或者加上@ResponseBody注解的效果是一样的,任选其一即可,也可以都设置。
  17. // @ResponseBody
  18. public
  19. ResponseEntity<Item> queryItemById(@PathVariable("id") Long id) {
  20. try {
  21. Item item = this.itemService.queryById(id);
  22. // 查询成功,响应的状态码应为200
  23. // 可以设置HttpStatus枚举的OK
  24. // return
  25. ResponseEntity.status(HttpStatus.OK).body(Item);
  26. // 也可以使用ok()方法,效果和上面是一样的
  27. return
  28. ResponseEntity.ok().body(item);
  29. } catch (Exception e) {
  30. // TODO Auto-generated catch block
  31. e.printStackTrace();
  32. }
  33. // 如果有异常,设置状态码为500
  34. return
  35. ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
  36. }
  37. }

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

RESTful风格化的更多相关文章

  1. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

  2. ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    介绍 什么是RESTful?  这里不多做赘述,详情请百度! 哈哈,本来还想巴拉巴拉介绍一些webapi, RESTful的, 还是算了,咱们直接上干货!(原因是懒!哈哈) 使用 以前使用过mvc的人 ...

  3. 十 Restful风格

    1 restful风格化,url上的参数通过{}点符绑定,RequestMapping("item/{id}") 2 点位符参数名与方法参数名不一致时,通过@PathVariabl ...

  4. Restful资源文章

    理解RESTful架构 RESTful API设计指南 RESTful架构详解 NodeJs的RESTful API

  5. 【接口开发】浅谈 SOAP Webserver 与 Restful Webserver 区别

    接口,强大,简单,交互,跨越平台 下面简单阐述这两大接口思想 一 REST: REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性. ...

  6. (转载) RESTful API 设计指南

    作者: 阮一峰 日期: 2014年5月22日 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制 ...

  7. angular中使用ngResource模块构建RESTful架构

    ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...

  8. Linux学习日记-WCF RestFul的部署(三)

    一.关于WCF 的部署 默认的wshttp风格的wcf是很容易部署上去的,但是这里给个建议尽量不要使用WCF的配置文件去部署尽管 我们都已经很熟悉了,在使用配置文件你会发现各种蛋疼的问题. 二.WCF ...

  9. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

随机推荐

  1. 三大查找算法(Java实现)

    三大查找算法 1.二分查找(Binary Search) public class BinarySearch { public static void main(String[] args) { in ...

  2. Django - 后台admin不显示带auto_now, auto_now_add选项的字段

    https://stackoverflow.com/questions/6386172/datetimefield-doesnt-show-in-admin-system 解决办法 class Rat ...

  3. word中如何删除一张空白表格

    百度知道:https://baijiahao.baidu.com/s?id=1631677477148377412&wfr=spider&for=pc 当word中出现如下一张空白表格 ...

  4. PAT 1017 Queueing at Bank (模拟)

    Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...

  5. java篇 之 ==与equals

    ==是一个比较运算符,基本数据类型比较的是值,引用数据类型比较的是地址值. "=="比"equals"运行速度快,因为"=="只是比较引用. ...

  6. 吴裕雄 python 机器学习——数据预处理流水线Pipeline模型

    from sklearn.svm import LinearSVC from sklearn.pipeline import Pipeline from sklearn import neighbor ...

  7. VMware安装ACS5.8

    1.所需组件: VMware ACS5.8 iso 2.安装要求: 2 Core Processor 4 GB RAM 60 GB Hard drive 这些要求算是比较低的要求,不能比这个更low了 ...

  8. 解决ifarme在ios下无法使用

    在第一层的config 添加 <access origin="*" /><allow-navigation href="*" />< ...

  9. centos7 安装pip2和pip3

    linux pip2 安装cd /usr/bin yum install -y epel-release yum install -y python-pip _____________________ ...

  10. 实现一个简易的Unity网络同步引擎——netgo

    实现一个简易的Unity网络同步引擎Netgo 目前GOLANG有大行其道的趋势,尤其是在网络编程方面.因为和c/c++比较起来,虽然GC占用了一部分机器性能,但是出错概率小了,开发效率大大提升,而且 ...