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

栏目: 后端 · 发布时间: 7年前

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

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

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

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

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

用户故事

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

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

工作流程

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

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

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

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

非功能性需求

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

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

领域模型

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

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

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

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


以上所述就是小编给大家介绍的《译见|构建用户管理微服务(一):定义领域模型和 REST API》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

妙趣横生的算法

妙趣横生的算法

杨峰 / 清华大学出版社 / 2010-4 / 49.00元

《妙趣横生的算法(C语言实现)》理论与实践相结合,旨在帮助读者理解算法,并提高C语言编程能力,培养读者的编程兴趣,并巩固已有的C语言知识。全书分为2个部分共10章,内容涵盖了编程必备的基础知识(如数据结构、常用算法等),编程实例介绍,常见算法和数据结构面试题等。《妙趣横生的算法(C语言实现)》最大的特色在于实例丰富,题材新颖有趣,实用性强,理论寓于实践之中。通过《妙趣横生的算法(C语言实现)》的学......一起来看看 《妙趣横生的算法》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试