-
Notifications
You must be signed in to change notification settings - Fork 0
top constraint
雷霹雳的爸爸 edited this page Aug 29, 2018
·
27 revisions
- 对http response body的约定
- 不包含任何自定义状态码
- http 状态码200时,返回json内容格式有两种
- 单个记录
{"content":{"name":"Taylor Swift"}} - 集合内容
{"content":{"resultList":[{"name":"Taylor Swift"},{"name":"Maroon 5"}],total:100,pageNum:1,pageSize:10}}
- 单个记录
- http 状态码4xx或5xx时,返回json内容格式
- 形如:
{"error":"this is a error message detail"}
- 形如:
- 分页请求参数为pageSize和pageNum,分别表示每页记录数和请求第几页,不传缺省为10和1
- 需要传token的接口,token 值放置在Authorization 头部,形如以下dump 的HTTP请求头 Authorization 段
GET /v1/resource HTTP/1.1 Host: server.example.com Authorization: Bearer 1bf6d543d6cc95c25eb88d88c60b406d - 必选参数
- 除了token,租户还真有一个,即租户别名,即所有请求都需要确定请求的哪一个租户,参数名为tenant
- http 请求如果有 body ,则请求头部的 content-type 为 application/json
- POST method 的 http 请求,除租户别名tenant外所有参数均需放置在body里面,租户别名放querystring,瑞尔租户别名arrail,形如
POST /v1/users?tenant=arrail HTTP/1.1 Host: server.example.com Authorization: Bearer 1bf6d543d6cc95c25eb88d88c60b406d {"name":"Taylor Swift"}
- 【强制】每一个涉及特定租户功能的web接口都会验证参数tenant,指明是操作的哪一个租户,根据接口功能确定是否强制要求给出机构标识
- VCS 使用 git
- 构建管理使用 maven
- 如有二方库管理需求,使用git submodule进行管理,即不以任何方式导入maven中心库没有的jar包
- 严控二方库(跨服务使用的组件)的产生
- 不重复造轮子,是否有三方库(maven中心库中有)可以满足需要
- 当有这样的需求产生时,首先考虑是否设计内聚性出现了问题
- 多个服务序列化通信时的value对象,可以考虑冗余声明,同时使用lombok等方式减少不必要的代码量
- git submodule管理二方库的参考 to be continue
- 严控二方库(跨服务使用的组件)的产生
- IDL式的组件,版本仓库中仅保留IDL源文件,代码生成依赖 maven
- 要求整体架构使用前后端分离的方式实现
- 后端使用微服务架构风格进行设计
- 各服务选用Spring Boot来做项目基础框架
- 使用 Spring Boot Initializer 生成项目脚手架,保留maven wrapper到git仓库
- 使用 Spring Cloud Eureka 做注册中心
- 和认证系统对接使用OAuth2协议
- 服务对外认证由网关层统一处理
- 各服务选用Spring Boot来做项目基础框架
- 根据业务关联性纵向拆分服务,对于服务及服务间关系的有如下设计层面的指导性原则:
- 每个服务按需来选用自己的持久化存储基础设施,基础设施选型可包含不限于以下选型:MySQL,MongoDB,Neo4j等,但同一类型的存储不要选择多个,比如关系型数据库,不要同一个工程中同时使用MySQL和PostgreSQL
- 每个服务按项目初始的开发人员最大产能习惯或倾向性来选择持久层框架,但不要在一个项目中使用多个持久层框架
- 必须做到仅通过api调用来访问其他服务管理的私有数据
- 可以为提高效率在不同的服务中做数据冗余设计(持久的,或缓存的),但禁止直接访问其他服务的私有持久化存储地址(不共享存储)
服务间调用可以使用Feign- 服务间如有异步调用使用消息中间件选用和kafka或RabbitMQ
- kafka和RabbitMQ的选用原则,OLTP相关推荐是RabbitMQ,OLAP场景选择kafka
- 每个服务的数据库都要支持多租户多机构数据共享存储:
- 【强制】所有要按租户进行区分的数据表均增加tenant_id字段或有关系表记录与tenant_id关系且tenant_id不能为空
- 【强制】和机构有关的,需增加 organization_id 字段或有关系表记录与organization_id关系且不能为空
- 其他问题参考数据库风格指南文档
- Java版本固定为8,目前不要使用9和10的任何特性
- Java服务开发时,需要的类库版本如果包含在Spring Boot 2.x.x.RELEASE中,则以boot的 BOM 为准,不要再另行声明版本号,这方面如有特殊需要,请文档注明
- 其他方面参考Java编程风格指南文档
- Spring Boot 2.x.x.RELEASE
- 即确认大版本号是2,确定是Release版,项目使用Spring Cloud组件则使用Spring Boot Initializer生成(后续增量添加时如果不确定,可以用Spring Boot的Initializer来辅助处理pom dependency变化),依赖Spring Boot的BOM声明
- Redis 3.2.12
- MySQL 5.7.x
- Kafka 0.11.0.2
- RabbitMQ 3.7.6