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

@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风格化的更多相关文章

  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. 安卓开发:打印Log

    在iOS开发中使用NSLog进行打印调试,在安卓中使用的是Log.v(tag, msg);等进行打印调试. 参考:[https://blog.csdn.net/salary/article/detai ...

  2. js的split() 方法和join()方法

    定义和用法 split() 方法用于把一个字符串分割成字符串数组. String.split() 执行的操作与 Array.join 执行的操作是相反的. join() 方法用于把数组中的所有元素放入 ...

  3. rsyslog日志服务部署

    rsyslog简介 rsyslog是CentOS6和CentOS7默认的记录日志的服务 支持特性: UDP, TCP, SSL, TLS, RELP MySQL, PGSQL, Oracle实现日志存 ...

  4. 洛谷 P5016 龙虎斗(模拟)

    嗯... 题目链接:https://www.luogu.org/problem/P5016 这道题是一道模拟,不要考虑复杂,直接暴力枚举每一个点,看看加上s2之后两个势力的差值,找最小,记录下标. 注 ...

  5. jupyter更换路径

    初次使用anaconda中自带的jupyter,打开后默认工作路径为C:\Users\Admin(自己的用户名)     需要更换工作路径 更换方式如下: 打开C:\Users\Admin(自己的用户 ...

  6. 喵星之旅-狂奔的兔子-svn安装及使用

    一.服务端安装配置 1.安装svn 创建版本库并配置 以root用户登录,或者具有sudo权限的用户,这里选择root. yum install subversion 都选择y 2.创建版本库并配置 ...

  7. Spring Boot Shiro 使用教程

    Apache Shiro 已经大名鼎鼎,搞 Java 的没有不知道的,这类似于 .Net 中的身份验证 form 认证.跟 .net core 中的认证授权策略基本是一样的.当然都不知道也没有关系,因 ...

  8. 计划任务cron,date,时间同步ntp,chrony

    取出磁盘利用率最大值 ,写个脚本,做判断,只要快满了,就报警 计划周期性执行的任务提交给crond,到指定时间会自动运行 系统cron任务:系统维护作业  /etc/crontab 用户cron任务: ...

  9. 有个网站秒破mdb访问密码

    http://tools.bugscaner.com/crackmdb/网站

  10. proto school tutorial: blog: lesson 1

    https://proto.school/#/blog/01 我们现在希望:把一个post 和他的作者联系起来. 从之前的教程here中,你可以知道, 一个cid 就是代表一个link 比如: { l ...