REST介绍

representational State Transfer (REST) 是一种架构原则,其中将 web 服务视为资源,可以由其 URL 唯一标识。RESTful Web 服务的关键特点是明确使用 HTTP 方法来表示不同的操作的调用。

REST 的基本设计原则对典型 CRUD 操作使用 HTTP 协议方法:

POST - 创建资源

GET - 检索资源

PUT – 更新资源

DELETE - 删除资源

REST 服务的主要优势在于:

它们是跨平台 (Java、.net、PHP 等)高度可重用的,因为它们都依赖基本 HTTP 协议。

它们使用基本的 XML,而不是复杂的 SOAP XML,使用非常方便。

基于 REST 的 web 服务日益成为后端企业服务集成的首选方法。与基于 SOAP 的 web 服务相比,它的编程模型简单,而本机 XML(而不是 SOAP )的使用减少了序列化和反序列化过程的复杂性,并且不再需要其他作用相同的第三方库。

​​​​​​​编写目的

编写本文的目的是为了规范项目系统功能进行模块化、服务化,将用户的操作以服务的方式提供。系统与系统之间遵循服务规范,将系统与系统之间的交互转为定制化服务交互,以实现系统与系统之间的集成。

​​​​​​​编写原则

  1. 可寻址性(Addressability)REST 中的所有东西都基于资源 的概念。资源与 OOP 中的对象或其他名词不同,它是一种抽象,必须可以通过 URI 寻址或访问。
  2. 接口一致性(Interface uniformity)与 SOAP 或其他标准不同,REST 要求用来操纵资源的方法或动词不是任意的。这意味着 RESTful 服务的开发人员只能使用 HTTP 支持的方法,比如 GET、PUT、POST、DELETE 等等。因此不需要使用 WSDL 等服务描述语言。
  3. 无状态(Statelessness)为了增强可伸缩性,服务器端不存储客户机的状态信息。这使服务器不与特定的客户机相绑定,负载平衡变得简单多了。这还让服务器更容易监视、更可靠。
  4. 具象(Representational)客户机总是与资源的某种具象交互,绝不会直接与资源本身交互。同一资源还可以有多个具象。理论上说,持有资源的具象的任何客户机应该有操纵底层资源的足够信息。
  5. 连通性(Connectedness)任何基于 REST 的系统都应该预见到客户机需要访问相关的资源,应该在返回的资源具象中包含这些资源。例如,可以以超链接的形式包含特定 RESTful 服务的操作序列中的相关步骤,让客户机可以根据需要访问它们。基于 REST 的 Web 服务日益成为后端企业服务集成的

GET,DELETE,PUT和POST的典型用法

GET用法

​​​​​​​

安全且幂等

获取表示

变更时获取表示(缓存)

200(OK) - 表示已在响应中发出

204(无内容) - 资源有空表示

301(Moved Permanently) - 资源的URI已被更新

303(See Other) - 其他(如,负载均衡)

304(not modified)- 资源未更改(缓存)

400 (bad request)- 指代坏请求(如,参数错误)

404 (not found)- 资源不存在

406 (not acceptable)- 服务端不支持所需表示

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务端当前无法处理

POST用法

不安全且不幂等

使用服务端管理的(自动产生)的实例号创建资源

创建子资源

部分更新资源

如果没有被修改,则不过更新资源(乐观锁)

200(OK)- 如果现有资源已被更改

201(created)- 如果新资源被创建

202(accepted)- 已接受处理请求但尚未完成(异步处理)

301(Moved Permanently)- 资源的URI被更新

303(See Other)- 其他(如,负载均衡)

400(bad request)- 指代坏请求

404 (not found)- 资源不存在

406 (not acceptable)- 服务端不支持所需表示

409 (conflict)- 通用冲突

412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

415 (unsupported media type)- 接受到的表示不受支持

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务当前无法处理请求

PUT用法

不安全但幂等

用客户端管理的实例号创建一个资源

通过替换的方式更新资源

如果未被修改,则更新资源(乐观锁)

200 (OK)- 如果已存在资源被更改

201 (created)- 如果新资源被创建

301(Moved Permanently)- 资源的URI已更改

303 (See Other)- 其他(如,负载均衡)

400 (bad request)- 指代坏请求

404 (not found)- 资源不存在

406 (not acceptable)- 服务端不支持所需表示

409 (conflict)- 通用冲突

412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

415 (unsupported media type)- 接受到的表示不受支持

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务当前无法处理请求

DELETE用法

不安全但幂等

删除资源

200 (OK)- 资源已被删除

301 (Moved Permanently)- 资源的URI已更改

303 (See Other)- 其他,如负载均衡

400 (bad request)- 指代坏请求

404 (not found)- 资源不存在

409 (conflict)- 通用冲突

500 (internal server error)- 通用错误响应

503 (Service Unavailable)- 服务端当前无法处理请求

Java开发中RestFul用法举例

//@RestController 代替 @Controller,省略以后的 @ResponseBody
@RestController
@RequestMapping("/student")
public class StudentController {@Autowiredprivate StudentService studentservice;/*** 显示所有* url:"http://localhost/student/findall"* * @return*/@RequestMapping(value = "/findall")public List<Student> findAllStudent() {return studentservice.findAllStudent();}/*** 查找 restful 风格 * url:"http://localhost/student/findone/1"* * @param id* @return*/// == @RequestMapping(value = "/findone/{id}", method = RequestMethod.GET)@GetMapping("/findone/{id}")public Student findStudentRestful(@PathVariable("id") Integer id) {return studentservice.findStudent(id);}/*** 删除 restful 风格* url:"http://localhost/student/deleteone/4"* 注意无法通过浏览器的链接来模拟检验,可以通过 jquery的 $.ajax方法,并type="delete"* * @param id*/// == @RequestMapping(value = "/deleteone/{id}", method = RequestMethod.DELETE)@DeleteMapping("/deleteone/{id}")public void deleteStudentRestful(@PathVariable("id") Integer id) {studentservice.deleteStudent(id);}/*** 增加 restful 风格* url:"http://localhost/student/addone"* 通过<form>表单模拟验证* * @param student*/// == @RequestMapping(value="/addone",method=RequestMethod.POST)@PostMapping("/addone")public void addStudentRestful(Student student) {studentservice.addStudent(student);}/*** 修改 restful 风格* url:"http://localhost/student/updateone"* 验证:可以通过 jquery的 $.ajax方法,并type="put",同时注意data形式——A=a&B=b&C=c* * @param student*/// == @RequestMapping(value="/addone",method=RequestMethod.PUT)@PutMapping("/updateone")public void updateStudentRestful(Student student) {studentservice.updateStudent(student);}
}

Java开发中RestFul服务接口规范相关推荐

  1. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:虚无境 cnblogs.com/xuwujing/p/8260935.html 前言 在去 ...

  2. springboot增删改查案例_大神基于SpringBoot开发一个Restful服务,实现增删改查功能...

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  3. Java开发中经常使用到的几种WebService技术实现方案

    Java开发中经常使用到的几种WebService技术实现方案 随着异构系统互联需求的不断增加,WebService的重要性也日益彰显出来.凭借webservice,我们可以实现基于不同程序语言的项目 ...

  4. Java开发中Websocket的技术选型参考

    1. 前言 Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 ...

  5. Java开发中消息中间件的优势有哪些?

    系统解耦 交互系统之间没有直接的调用关系,只是通过消息传输,故系统侵入性不强,耦合度低. 提高系统响应时间 例如原来的一套逻辑,完成支付可能涉及先修改订单状态.计算会员积分.通知物流配送几个逻辑才能完 ...

  6. Java开发中的常见危险信号

    在开发,阅读,复审和维护成千上万行Java代码的几年中,我已经习惯于看到Java代码中的某些" 危险信号 ",这些信号通常(但可能并非总是)暗示着代码问题. 我不是在谈论总是错误的 ...

  7. JAVA 开发中常用的工具有哪些?

    Java开发中常用的工具有以下几种: Eclipse:一款非常流行的开发工具,提供了很多方便的功能,如代码自动补全.调试.版本控制等. IntelliJ IDEA:一款功能强大的Java集成开发环境, ...

  8. java linux 管理系统_用Java开发一个本地服务管理软件

    使用Java开发一个本机服务管理程序,能够控制本机Tomcat.Apache服务的开启和关闭,图形界面控制.用户可以自己扩展其他服务,用来学习图形界面编程.多线程.事件响应等都不错. 一.最终界面 先 ...

  9. day01--java基础编程:计算机基础知识 ,java语言概述,java开发环境搭建,eclipse概述,创建简单java项目,JDK JRE JVM的关系,java开发中的命名规范,编程风格

    1 Day01–Java开发环境+HelloWorld 1.1 计算机基础知识 资料下载网址:刘沛霞 18600949004 code.tarena.com.cn tarenacode code_20 ...

最新文章

  1. 算符“.*”和“-*”,用于“成员指针”
  2. C和指针之用拉托斯特尼筛方法(Eratosthenes)查找区间质素个数
  3. Java 并发(Future 模式)
  4. python环境安装opencv_服务器python环境和opencv安装方法
  5. 一朝不知IP事,一世妄为测试人...
  6. html选择区域高亮,css+js实现部分区域高亮可编辑遮罩层
  7. Java并发编程实践-总结
  8. 视频教程- Docker入门与进阶实战(上)-Docker/K8S
  9. SOUI中几个view视图控件的基本使用
  10. matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)
  11. mac电脑重复文件如何查找?
  12. element ui框架(准备)
  13. 软件测试中如何测试算法?
  14. JAVA WEB技术
  15. ASEMI代理MC34PF3001A7EP原装现货NXP车规级MC34PF3001A7EP
  16. java实现购买_一个简单的实现购买商品功能的Java小程序
  17. LCT求解最小生成树
  18. 关于 Vue2 .prettier 配置项
  19. 构件组装-总结与展望
  20. 剖析cmwap和cmnet接入点区别和应用

热门文章

  1. 转:虚幻4材质介绍 Unreal4 Material Expression
  2. 物联网系统设计工具箱——Dashboard框架Dashing
  3. ArcGIS for Android 100.3.0(6):动态地图图层(ArcGISMapImageLayer和ArcGISMapImageSublayer)
  4. 方差、标准差和协方差
  5. Java工程师培训课(十二)
  6. 小球落地java_JAVA------------------华为机试----------------求小球落地5次后所经历的路程和第5次反弹的高度...
  7. 什么是库?库的开发与使用(C/C++)
  8. 123ec在php中什么意思,【笛头EC、HC、DX、CY。】都是什么意思。
  9. mysql之数据库int(10)能输入多少位
  10. 《BIG DATA大数据日知录 架构和算法》读书笔记