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即可。

配置中心使用规则

  1. 开发时启动本地配置中心config-server。
  2. 开发环境可以指向配置本地仓储,线上仓储名为config,可以下载到本地,作为配置文件的本地仓储。
  3. 配置本地仓储,需要进行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();

results matching ""

    No results matching ""