译见|构建用户管理微服务(一):定义领域模型和 REST API

译见系列  道客船长「译见」系列,关注国外云计算领域的技术和前沿趋势,每周为开发者提供精选译文。

近期我们将持续更新《构建用户管理微服务》系列文章,敬请关注!

在《构建用户管理微服务》的第一部分中,我们会定义应用的需求,初始的领域模型和供前端使用的 REST API。 我们首先定义用户注册管理用户的故事。
2

用户故事

在设计新系统时,值得考虑的是用户希望实现的结果。 下面您可以找到用户注册系统应具有的基本功能的列表。

  • 作为用户,我想注册,以便我可以访问需要注册的内容
  • 作为用户,我想在注册后确认我的电子邮件地址
  • 作为用户,我想登录并注销
  • 作为用户,我想更改我的密码
  • 作为用户,我想更改我的电子邮件地址
  • 作为用户,我想要重置我的密码,以便我忘记密码后可以登录
  • 作为用户,我想更新我的个人资料,以便我可以提供我正确的联络资料
  • 作为用户,我想关闭我的帐户,以便我可以关闭我与我注册的服务的关系
  • 作为管理员,我想手动管理(创建/删除/更新)用户,以便工作人员不必重新进行注册过程
  • 作为管理员,我想手动创建用户,这样工作人员就不用再过注册过程了
  • 作为管理员,我想列出所有用户,即使是那些曾经关闭帐户的用户
  • 作为管理员,我希望能够看到用户的活动(登录,注销,密码重置,确认,个人资料更新),以便我可以遵守外部审计要求

工作流程

我们来看看系统将要支持什么样的工作流程。首先,人们应该能够注册和登录,这些是相当明显的功能。

1

但是,处理确认令牌时需要谨慎。 由于它们可用于执行特权操作,因此我们使用一次性随机令牌来处理密码重置和电子邮件确认。

当一个新的令牌由用户生成,无论什么原因,所有以前的都是无效的。 当有人记住他们的密码时,以前发出的和有效的密码重置令牌必须过期。

非功能性需求

用户故事通常不会定义非功能性要求,例如安全性,开发原理,技术栈等。所以我们在这里单独列出。

  • 领域模型是使用域驱动的设计原则在纯 Java 中实现的,并且独立于要使用的底层技术栈
  • 当用户登录时,将为他们生成一个 JWT 令牌,有效期是 24 小时。在后续请求中包含此令牌,用户可以执行需要身份验证的操作
  • 密码重置令牌有效期为 10 分钟,电子邮件地址确认令牌为一天
  • 密码用加密算法(Bcrypt)加密,并且每用户加盐
  • 提供了 RESTful API,用于与用户注册服务进行交互
  • 应用程序将具有模块化设计,以便能够为各种场景提供单独的部署工件(例如,针对 Google App Engine 的 2.5 servlet 兼容 WAR 和其他用例的基于 Spring Boot 的自包含可执行 JAR)
  • 实体标识符以数据库无关的方式生成,也就是说,不会使用数据库特定机制(AUTO_INCREMENT 或序列)来获取下一个 ID 值。解决方案将类似于 Instagram genetes ID。

领域模型

对于第一轮实现中,我们只关注三个实体,即用户,确认令牌和用户事件。

0

rest api

访问下面的大多数 API 都需要认证,否则返回一个 UNAUTHORIZED 状态码。 如果用户尝试查询属于某个其他用户的实体,则他们还会返回客户端错误(FORBIDDEN),除非他具有管理权限。 如果指定的实体不存在,则调用的端点返回 NOT_FOUND。

创建会话(POST /sessions)和注册新用户(POST / users)是公开的,它们不需要身份验证。

Session management

GET /session/{session_id}

如果没有给定 ID 的会话或者会话已经过期,则返回给定会话的详细信息或 NOT_FOUND。

POST /session

创建新会话,前提是指定的电子邮件和密码对属于一个有效的用户。

DELETE /session/{session_id}

删除给定的会话(注销)。

User management

GET /users/{user_id}

根据一个指定的 ID 查找用户。

GET /users

列举系统中所有的用户。

POST /users

注册一个新的用户。

DELETE /users/{user_id}

删除指定的用户。

PUT /users/{user_id}

更新指定用户的个人信息。

PUT /users/{user_id}/tokens/{token_id}

使用给定用户的令牌执行与令牌类型相关的操作。

原文链接:https://springuni.com/user-management-microservice-part-1

下期内容:构建用户管理微服务(二):实现领域模型

DaoCloud 公司简介:「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云原生操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 400 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。

未经允许不得转载:DaoCloud道客博客 » 译见|构建用户管理微服务(一):定义领域模型和 REST API

申请试用