本文档需要有一定基础的人看,需要具备 SpringCloud + SringBoot 开发基础、Mysql基础、Mongodb基础、Redis基础.
本项目前后端完全分离,使用JSON数据进行前后端数据交互,接口文档使用Swagger2文档.
核心包: Spring Boot - 项目基于Spring Boot Start Web核心包,版本号: 2.3.1.RELEASE.
微服务架构基于: Spring Cloud,版本号: Hoxton.SR6
使用: Eureka + Spring Cloud Config + Open Feign + TX-LCN分布式事务 + Zipkin链路追踪
面向切面: 项目中面向切面(AOP)使用 SpringBoot 拦截器.
缓存: 前期使用单机架构Redis, 后期业务上数据量提高可做Redis集群.
数据库(DB): MYSQL - 版本号: 8.0.21
持久化框架: SpringBoot 集成 MyBatis - 版本号: 1.3.2
持久化数据分页框架: PageHelper - 版本号: 1.2.5
数据库连接池: Druid - 版本号: 1.1.22
接口文档: swagger : knife4j-spring-ui
分布式锁: 使用 Redisson
JSON解析器: 阿里JSON解析器fastjson - 版本号: 1.2.73
权限框架:
管理后台使用 Spring Security 安全认证
前端接口(APP/H5) 使用jwt
等待完善。。。。。
1. shop-eureka-server ---> ShopEurekaServerApplication 注册中心
访问: http://127.0.0.1:11111 查看eureka服务注册情况
2. shop-config-server ---> ConfigApplication 配置中心
3. shop-tx ---> TxApplication 分布式事务控制中心
需要创建 "shop_tx" 数据库(doc/sql/shop-tx/TX-LCN分布式事务-INIT.sql), 初始化sql.
更改配置文件中tx-lcn mysql连接信息: shop-config/shop-tx/shop-tx-dev.properties, shop-config/shop-oms/shop-oms-dev.properties, shop-config/shop-pms/shop-pms-dev.properties
访问:http://127.0.0.1:7970/admin/index.html#/login 进入管理后台
默认密码是:codingapi
4. shop-pms ---> pms-server ---> PMSApplication 商品微服务
5. shop-oms ---> oms-server ---> OMSApplication 订单微服务
6. shop-gateway ---> GatewayApplication 统一网关 (使用 GateWay,因为gateway集成的SpringWebflux)
访问: http://127.0.0.1:5555/order/order/orderInfo/13
通过 Gateway 网关请求订单微服务
1.协议
API与用户的通信协议,总是使用HTTPS协议,确保交互数据的传输安全。
2.安全
为了保证接口接收到的数据不是被篡改以及防止信息泄露造成损失,对敏感数据进行加密及签名。
数据加密
api接口请求参数一律采用RSA进行加解密,在客户端使用公钥对请求参数进行加密,在服务端使用对数私钥据进行解密,防止信息泄露。签名
为了防止请求数据在网络传输过程中被恶意篡改,对所有非查询接口增加数字签名,签名原串为对请求参数进行自然排序,通过私钥加签后放入sign参数中。时间戳
api接口中增加时间戳timestamp字段,作用:固定时间范围内,减少同一请求被暴力调用的次数。3.API版本控制
API的版本号统一放入URL。
https://api.example.com/v{n}/ --- v{n}n代表版本号,分为整形和浮点型
整形版本号:大功能版本发布形式;具有当前版本状态下的所有API接口,例如:v1,v2
浮点型:为小版本号,只具备补充api的功能,其他api都默认调用大版本号的API,例如v1.1,v1.24.API路径规则
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词。名词尽量与数据库表格名对应。
例子:
https://api.example.com/v1/products
https://api.example.com/v1/users
https://api.example.com/v1/employees5.HTTP请求方式
对于资源的具体操作类型,由HTTP动词表示。
常用的HTTP动词由下面四个(括号里是对应的SQL命令)。
GET(SELECT):从服务器取出资源。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源。
DELETE(DELETE):从服务器删除资源。例子:
GET/product:列出所有商品
POST/product:新建一个商品
GET/product/ID:获取某个指定商品的信息
PUT/product/ID:更新某个指定商品的信息
DELETE/product/ID:删除某个商品
GET/product/ID/purchase:列出某个指定商品的所有投资者
GET/product/ID/purchase/ID:获取某个指定商品的指定投资者信息6.请求数据
公共请求参数
POST 请求: 接受json格式请求参数 使用注册 @RequestBody ,需要单独封装dto,进行接受请求参数
{
"request": {
"name": "ddcat",
"age": 18
}
}
示例:
@ApiOperation("增加币种")
@AnonymousAccess
@GetMapping("/add")
AjaxResult add(@RequestBody CoinDTO coin){
if(coin == null){
return AjaxResult.error("币种信息不能为空!");
}
// 下面执行把dto转为实体类然后插入业务....
return AjaxResult.success("新增成功");
}
GET 请求:以 key=value 接受请求参数 使用注解 @RequestParam 标注每个接口参数
https://ip:port/api/v1/coin/info?id=129&value=wawd
示例:
@ApiOperation("查询币种详情")
@AnonymousAccess
@GetMapping("/info")
AjaxResult info(@RequestParam(value = "id", required = false) Long id){
if(id == null){
return AjaxResult.error("查询币种不能为空,请稍后重试!");
}
// 下面执行查询业务....
Coin coin = new Coin();
return AjaxResult.success(coin);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。