2 Star 9 Fork 5

ddCat / shop-cloud

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 6.03 KB
一键复制 编辑 原始数据 按行查看 历史

开发说明

本文档需要有一定基础的人看,需要具备 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 网关请求订单微服务    

SpringCloud微服务架构图

Image text

Fegin 使用

Image text

接口规范:

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.2

4.API路径规则

在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词。名词尽量与数据库表格名对应。

例子:

https://api.example.com/v1/products
https://api.example.com/v1/users
https://api.example.com/v1/employees

5.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);
}
Java
1
https://gitee.com/hengge666/shop-cloud.git
git@gitee.com:hengge666/shop-cloud.git
hengge666
shop-cloud
shop-cloud
develop

搜索帮助