- REST(
@RestController
,SpringMVC
) - 数据绑定和校验(
@RequestBody
,@Valid
,@PathVariable
) - 访问MySQL数据库(
JPA
) - DTO、DO等POJO的相互转换(
ModelMapper
) - 统一结果处理(
ResponseResult
) - 统一错误处理(
@ControllerAdvice
,@ExceptionHandler
) - 日志(
logback
) - 跨域(
WebMvcConfigurerAdapter
) - 统一认证、鉴权(
JWT
、SpringSecurity
) - 集成Swagger2(API文档管理)(
Springfox
) 加盐
、随机化Hash
保存密码(Bcrypt
)- 请求日志
- HTTPS(
letsencrypt
)
- 缓存:Redis(
spring-data-redis
、@EnableCaching
) - 数据库设计(
MySQLWorkbench
) - 根据数据库生成JavaBean(
IDEA的生成脚本
) - 数据库升级(
flyway
) - 数据库备份(
cron
) - 多环境配置(
profile
),外部化环境配置,对开发透明(docker环境变量
) - 集成Jenkins(自动测试、自动部署) (
gitlab-ci
) - MySQL数据读写分离
- HTTP缓存
- 权限拦截,参考
- 单元测试
- 禁止数据库服务访问本地文件系统
- SQL语句注入问题
主要有:
- Spring Boot
- Spring Web
- Spring Data JPA
- Spring Security
API文档管理
- Lombok 消除冗余的Java代码,如:setter、getter方法
- ModelMapper 可以转换DO、DTO等POJOs
- Flyway 数据库迁移工具
- JRebel,热加载(必须)
- Alibaba Java Config Guidelines(必须)
- Lombok(必须)
- FindBugs
- QAPlug-PMD
- SonarLint
按模块+职责分包分层。
每个模块均有:Controller
、Service
、DAO
三层
- Jar包
- Docker:
docker-compose up -d mysql redis
、docker-compose down
- 所有API在路由上区分移动端、后台和微信端。如:
/web/v1/user
、/app/v1/wx/user
、/v1/user
- 所有API改动需仔细想想是否会影响旧版本
- 查询参数,如果多个,禁止使用诸如
keyword
等此类宽泛的用词 - 若适当,可将不同端的接口拆分成不同的
Controller
,但Service
可共用一个 - 出API时先想想以后发生改动怎么办