专栏名称: 张风捷特烈
海的彼岸,有我未曾见证的风采。
目录
相关文章推荐
芋道源码  ·  分享15条高频SQL优化技巧 ·  3 天前  
Java编程精选  ·  SpringCloud+Gateway+Se ... ·  6 天前  
芋道源码  ·  线程数突增!领导说再这么写就gc掉我.... ·  5 天前  
芋道源码  ·  字节做 IDE 了!!! ·  1 周前  
51好读  ›  专栏  ›  张风捷特烈

SpringBoot20-REST API接口

张风捷特烈  · 简书  ·  · 2018-10-19 10:06

正文

一、REST 简介

1.接口的意义:
系统关联基于接口来实现,接口测试将复杂的系统关联简化
接口功能比较单一,能更好的进行[测试覆盖],容易实现[自动化持续集成]
单元测试之后,UI测试之前,接口测试比单元测试粒度粗

2.Web Service:
一种跨编程语言和操作平台的远程调用技术
实现方式:SOAP和REST

3.SOAP:
简单对象访问协议(Simple Object Acsess Protocol)
数据交换的一种协议,轻量级、简单的、基于Xml的协议

4.REST:
表示性状态转换(Representational State Transfer)
一种系统(软件)架构风格(非标准),一种分布式系统的应用层解决方案
安全性 SOAP>REST、效率和易用性 REST>SOAP、成熟度 SOAP>REST

5.RESTFUL:
RESTFUL 是REST的形容词
RESTFUL API 是指REST风格的接口
RESTFUL与REST、rest、resetful、RESTful意义上等同


二、RESTFUL接口

1.优势与特点
实现Client和Server端解耦,可降低开发的复杂性,提高系统的可伸缩性

资源为核心思想(面向资源的CRUD):HTTP[传输协议]升级为[应用传输协议]
创造资源C:POST      
获取资源R:GET          仅获取资源头信息:HEAD
更新资源U:PUT          更新资源部分属性:PATCH (使用较少,一般用POST代替)
删除资源D:DELETE

幂等性:发送一次和多次请求引起的[边界效应]一致
安全性:仅获取书籍,不具有[边界效应]GET、HEAD、OPTIONS
2.REST接口风格:
协议:使用https协议
域名:https://api.toly1994.com
版本控制:将版本号放在URL或Head二中
路径:只能包含名词,不能用动词
过滤信息:?limit=10      ?offset=10      ?page=1         ?sortby=name
Hypermedia API :在返回结果中提供其他连接资源,连向其他API
验证:确定身份
授权:权限设置
通用返回结果:如:
    {
    "msg":"uri not found",
    "code":0001,
    "data":null,
    "request":"GET\/v2\/photo\/132"
    }
常见的Http状态码.png

三、代码测试:基于SpringBoot-07-之数据库JPA(CRUD)修改

测试使用的RESTFUL接口一览:
http://localhost:8080/api/sword: GET 获取所用剑的信息
http://localhost:8080/api/sword: POST 新建一把剑
http://localhost:8080/api/sword/26: GET 获取一把指定id的剑信息
http://localhost:8080/api/sword/40: PUT 修改一把指定id的剑信息
http://localhost:8080/api/sword/39: DELETE 删除指定id的剑
http://localhost:8080/api/sword/21/name: GET 查询指定id的剑的名称
1.GET 获取所用剑的信息 http://localhost:8080/api/sword
/**
 * 查询所有:GET http://localhost:8080/api/sword
 *
 * @return 查询所有
 */
@GetMapping(value = "/sword")
public ResultBean findAllToJson() {
    return ResultHandler.ok(mSwordRepository.findAll());
}
列出所有.png

2.POST 新建一把剑 http://localhost:8080/api/sword
/**
 * 新建一把剑:POST GET http://localhost:8080/api/sword
 * @param sword 剑
 * @return 剑
 */
@PostMapping(value = "/sword")
public ResultBean addOne(@ModelAttribute Sword sword) {
    Sword save = mSwordRepository.save(sword);
    return ResultHandler.ok(save);
}
添加一个.png

3.GET 获取一把指定id的剑信息 http://localhost:8080/api/sword/26
/**
 * 根据id查询 GET http://localhost:8080/api/sword/26
 *
 * @param id id
 * @return 剑
 */
@GetMapping(value = "/swords/find/{id}")
public ResultBean find(@PathVariable("id") Integer id) {
    return ResultHandler.ok(mSwordRepository.findById(id).get());
}
查询一个.png

4.PUT 修改一把指定id的剑信息 http://localhost:8080/api/sword/26
/**
 * 根据id更新   PUT http://localhost:8080/api/sword/40
 *
 * @param id id
 * @return 剑
 */
@PutMapping(value = "/sword/{id}")
public ResultBean update(@PathVariable("id") Integer id, @ModelAttribute Sword sword) {
    return ResultHandler.ok(mSwordRepository.save(sword));
}
更新一个.png

5.DELETE 删除指定id的剑 http://localhost:8080/api/sword/39
/**
 * 根据id删除 DELETE http://localhost:8080/api/sword/39
 *
 * @param id id
 */
@DeleteMapping(value = "/sword/{id}")
public ResultBean insert(@PathVariable("id") Integer id) {
    ResultBean resultBean = find(id);
    mSwordRepository.deleteById(id);
    return resultBean;
}
删除一个.png

6.GET根据id查询剑的名称: http://localhost:8080/api/sword/21/name
/**
 * 根据id查询剑的名称 GET http://localhost:8080/api/sword/21/name
 *
 * @param id id
 * @return 剑
 */
@GetMapping(value = "/sword/{id}/name")
public ResultBean findName(@PathVariable("id") Integer id) {
    return ResultHandler.ok(mSwordRepository.findById(id).get().getName());
}
查询一个名称.png

后记:捷文规范

1.本文成长记录及勘误表
项目源码 日期 备注
V0.1--无 2018-10-19 SpringBoot20-REST API接口
2.更多关于我
笔名 QQ 微信 爱好
张风捷特烈 1981462002 zdl1994328 语言
我的github 我的简书 我的CSDN 个人网站
3.声明

1----本文由张风捷特烈原创,转载请注明
2----欢迎广大编程爱好者共同交流
3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
4----看到这里,我在此感谢你的喜欢与支持