7.0架构及规范
工程结构
工程名 | 说明 |
---|---|
b2b2c | 主工程(父) |
config-server | 配置中心 |
framework | 基础框架 |
javashop-core | 核心业务 |
ucenter | 用户认证中心 |
consumer | 消费者服务 |
buyer-api | 买家api |
seller-api | 商家api |
manager-api | 管理中心api |
包名
工程包名规范
项 | 包名 |
---|---|
主包名 | com.enation.app.javashop |
framework | <mainpackage>.framework |
javashop-core | <mainpackage>.core |
buyer-api | <mainpackage>.buyer.api |
seller-api | <mainpackage>.seller.api |
manager-api | <mainpackage>.manager.api |
consumer | <mainpackage>.consumer |
ucenter | <mainpackage>.ucenter |
javashop-core 包名规范
业务 | 包名 |
---|---|
主包名 | com.enation.app.javashop.core |
会员 | <mainpackage>.member |
店铺 | <mainpackage>.shop |
商品 | <mainpackage>.goods |
商品全文检索 | <mainpackage>.goodssearch |
交易 | <mainpackage>.trade |
支付 | <mainpackage>.payment |
售后 | <mainpackage>.aftersale |
结算 | <mainpackage>.orderbill |
API路径规范
项 | 包名 |
---|---|
会员 | /member/* |
店铺 | /shop/* |
商品 | /goods/* |
交易 | /trade/* |
支付 | /payment/* |
售后 | /aftersale/* |
结算 | /orderbill/* |
统计 | /statistics/* |
注:在每个api服务中,上述业务路径是相同的
异常规范
根据http状态判断业务是否正常
如果正常要求返回对象的Json
如果有异常返回异常的json
异常Json格式规范
{
"code": "100",
"message": "无权访问",
"data": []
}
项 | 类型 | 是否必须 | 说明 |
---|---|---|---|
code | 字符 | 是 | 错误码,详见下面错误码规范 |
message | 字符 | 是 | 错误信息 |
data | 对象或数组 | 否 | 可能需要的数据 |
code 规范
三位数字
每个模块code规范:
业务 | 规范 | 错误码类 |
---|---|---|
系统级别 | 000 - 099 | |
会员 | 100 - 199 | MemberErrorCode |
店铺 | 200 - 299 | ShopErrorCode |
商品 | 300 - 399 | GoodsErrorCode |
交易 | 400 - 499 | TradeErrorCode |
支付 | 500 - 599 | PaymentErrorCode |
售后 | 600 - 699 | AftersaleErrorCode |
结算 | 700 - 799 | OrderBillErrorCode |
每个模块在开发过程中应记录 code 的说明在这里:《错误码对照表》
异常类
系统内置了一些异常类供开发者处理异常
统一定义在:com.enation.app.javashop.framework.exception中
异常 | 说明 |
---|---|
NoPermissionException | 无权限异常,比如试图更新一个别人的账号的密码 |
ResourceNotFoundException | 资源找不到异常 |
ServiceException | 其它业务异常 |
其中ServiceException 供业务类处理异常使用
throw new ServiceException(GoodsErrorCode.E300.code(),"消息");
可以通过设置其data 属性来向前端输出 error json中的data
List list = ...
throw new ServiceException(GoodsErrorCode.E300.code(),"消息",list);
可以通过设置其 status_code 来改变http 在status code:
ServiceException e = new ServiceException(GoodsErrorCode.E300.code(),"消息");
e.setStatus_code(HttpStatus.BAD_REQUEST);
throw e;
多数据源的使用
daoSupport和对数据源对应关系
业务 | 数据源 | 涵盖业务 |
---|---|---|
会员 | memberDaoSupport | 会员、卖家、店铺 |
系统 | systemDaoSupport | 系统相关 |
商品 | goodsDaoSupport | 商品、sku、品牌、分类 |
交易 | tradeDaoSupport | 交易、订单、售后、结算 |
统计 | sssDaoSupport | 统计业务 |
数据源配置规则
以商品及订单数据源举例(使用了相同的用户名和密码)
spring:
datasource:
url: jdbc:mysql://localhost:3306/v641? useUnicode=true&characterEncoding=utf8&autoReconnect=true
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
druid:
goods:
url: jdbc:mysql://localhost:3306/goods
trade:
url: jdbc:mysql://localhost:3306/trade
#在这里可以继续配置其它数据源
其中spring.datasource的配置是公用配置部分:
spring:
datasource:
url:jdbc:mysql://localhost:3306/v641?useUnicode=true&characterEncoding=utf8&autoReconnect=true
username:root
password:123456
driver-class-name:com.mysql.jdbc.Driver
druid:
goods:
url:jdbc:mysql://localhost:3306/goods
username:goodsdbname
password:goodspwd
注:如果不进行数据库分离,则只需要配置spring.datasource即可。
配置中心使用规则
- 开发时启动本地配置中心config-server。
- 开发环境可以指向配置本地仓储,线上仓储名为config,可以下载到本地,作为配置文件的本地仓储。
- 配置本地仓储,需要进行git add . 和git commit -m操作,但不可push到线上。
详情可参照教程:配置中心教程。
验权机制
7.0全部采用token验权,
其中seller-api要求的是seller权限
buyer-api要求提buyer的权限
manager-api要求的是 manager的权限
分为开发和生产环境两种
环境的声明在工程的bootstrap.yml中:
spring:
...
cloud:
config:
uri: http://localhost:8888
profile: dev
其中的profile标明了开发环境(dev)还是生产环境(prod)
开发环境
开发环境为了便于开发,直接在header中传递token:
Authorization:Bearer yourtoken
生产环境
生产环境为了防止重放攻击,需要传递如下四个参数:
参数 | 说明 |
---|---|
uid | 用户id |
timestamp | 时间戳,精确到秒 |
nonce | 随机数,6位数字 |
sign | md5(uid+timestamp+nonce+token) |
token的获取
除使用统一登录api获取token外,
还可以使用 TokenCreator 生成token
当前的获取
使用UserContext获取:
//获取买家
Buyer buyer = UserContext.getBuyer();
//获取卖家
Seller seller = UserContext.getSeller();