[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0IT0ggS-1581424564711)(http://jskillcloud.com/img/post/20181212/data.png#pic_center)]

Gravitee的数据模型也不复杂,核心概念是:

  • oauth_clients,客户应用
  • oauth_users,用户或资源拥有者

和三种tokens:

  • oauth_access_tokens,访问令牌
  • oauth_authorization_tokens,授权令牌(授权码)
  • oauth_refresh_tokens,刷新令牌

相关概念和其中的字段本身不难理解,关系也很简单,客户和令牌之间是一对多关系,一个客户应用可以关联很多用户的令牌;用户和令牌之间也是一对多关系,即一个用户使用一个或多个不同应用(client)登陆后,会生成对应的授权码和访问令牌(或+刷新令牌)。

另外还有三个支持表,oauth_roles存储用户角色,oauth_scopes存储作用域相关信息,migrations表支持数据库升级。

波波平时做架构设计,关心的基本上就是:

  1. 总体架构,系统的总体架构长啥样?分哪些模块?
  2. 接口模型,系统对外暴露哪些接口?主要的输入输出是什么?
  3. 数据模型,也称领域模型(domain model),系统的核心概念有哪些?相互关系如何?

波波认为这三者是一个系统的核心抽象,是软件最本质的东西。如果这三者定下来了,那么系统基本就定型了,其它的,比如使用哪种语言实现,使用哪种数据访问层框架等等,都是用来填充的是细节。细节可以不断调整变化,但是本质抽象基本不变(除非架构设计做重大调整)。波波平时做架构设计评审,基本就关注这三样东西,如果一个架构师或者开发lead能把这三样东西讲清楚了,我就评审过,如果讲不清楚,那么不好意思,请回去重新设计。