7.0架构及规范

工程结构

工程名 说明 默认端口号
b2b2c 主工程(父)
config-server 配置中心 8888
framework 基础框架
javashop-core 核心业务
base-api 基础业务api 7000
passport 用户认证中心 7001
buyer-api 买家api 7002
seller-api 商家api 7003
manager-api 管理中心api 7004
consumer 消费者服务

包名

工程包名规范

包名
主包名 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
统计 <mainpackage>.statistics

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
统计 800 - 899 StatisticsErrorCode
系统 900 - 999 SystemErrorCode

每个模块在开发过程中应记录 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;

参数规范

1.严格遵守《Javashop开发规范》

2.应使用阿里巴巴代码规约扫描插件进行扫描,做到新增的类,全部符合扫描通过

3.前端向服务器端传参使用蛇形规范如:

?user_id=1&user_name=wangfeng

注:Javashop7.0实现了自动将蛇形参数转化为驼峰参数的机制,接收上述参数的controller用驼峰即可:

public String  login(Integer userId,String userName)

4.服务器端向前端输出json参数使用蛇形规范,如:

{
  "brand_id": 0,
  "goods_name": "string"
  "image_list":[]
}

5.客户端向服务器端传递分页参数规范为:

page_no=<当前页号>&page_size=<分页大小>

6.服务器端向客户端口传输分页结果规范为:

{
  "data": [
    {.. }
  ],
  "data_total": 0,
  "page_no": 0,
  "page_size": 0
}

7.带有分页的api 1)分页参数命名必须使用pageNo(页码)和pageSize(每页显示数量) 2)参数类型必须是引用类型Integer 3)不能使用封装对象接收分页参数

多数据源的使用

daoSupport和对数据源对应关系

业务 数据源 事务 涵盖业务
会员 memberDaoSupport memberTransactionManager 会员、卖家、店铺
系统 systemDaoSupport systemTransactionManager 系统相关
商品 goodsDaoSupport goodsTransactionManager 商品、sku、品牌、分类
交易 tradeDaoSupport tradeTransactionManager 交易、订单、售后、结算
统计 sssDaoSupport sssTransactionManager 统计业务

数据源配置规则

以商品及订单数据源举例(使用了相同的用户名和密码)

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 ""