一、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"
}
-
测试使用的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的剑的名称
/**
* 查询所有:GET http://localhost:8080/api/sword
*
* @return 查询所有
*/
@GetMapping(value = "/sword")
public ResultBean findAllToJson() {
return ResultHandler.ok(mSwordRepository.findAll());
}
/**
* 新建一把剑: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);
}
/**
* 根据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());
}
/**
* 根据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));
}
/**
* 根据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;
}
/**
* 根据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());
}
后记:捷文规范
1.本文成长记录及勘误表
2.更多关于我
3.声明
1----本文由张风捷特烈原创,转载请注明
2----欢迎广大编程爱好者共同交流
3----个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
4----看到这里,我在此感谢你的喜欢与支持