1. 简介
  2. 1. 序言
    1. 1.1. 本书讲述了什么?
    2. 1.2. 本书适合谁阅读
  3. 2. 入门
    1. 2.1. 安装Rust工具链
    2. 2.2. 初始化我们的项目
    3. 2.3. 选择一个集成开发环境
    4. 2.4. 内部开发循环
  4. 3. 写一个电子邮件新闻程序
    1. 3.1. 我们的驱动示例
    2. 3.2. 我们的Newsletter应该做什么?
    3. 3.3. 迭代工作
  5. 4. 注册新用户
    1. 4.1. 我们的策略
    2. 4.2. 选择一个Web框架
    3. 4.3. 我们的第一个Endpoint - 简单的可用性检测
    4. 4.4. 我们的第一个集成测试
    5. 4.5. 实现我们的第一个集成测试
    6. 4.6. 回顾
    7. 4.7. 使用HTML表单
    8. 4.8. 存储数据: 数据库
    9. 4.9. 持久化新订阅者
    10. 4.10. 更新我们的测试
    11. 4.11. 小结
  6. 5. 遥测
    1. 5.1. 未知的未知
    2. 5.2. 可观察性
    3. 5.3. 日志记录
    4. 5.4. 检测 POST /订阅
    5. 5.5. 结构化日志
    6. 5.6. 小结
  7. 6. 部署到生产环境
    1. 6.1. 我们必须谈谈部署
    2. 6.2. 选择我们的工具
    3. 6.3. 我们项目的Dockerfile
    4. 6.4. 部署到 DigitalOcean Apps Platform
  8. 7. 拒绝无效订阅者 第一部分
    1. 7.1. 需求
    2. 7.2. 第一个实现
    3. 7.3. 验证就像一口漏水的大锅
    4. 7.4. 类型驱动开发
    5. 7.5. 所有权与不变量
    6. 7.6. Panics
    7. 7.7. 将错误作为值 - Result
    8. 7.8. 深刻的断言错误: claim
    9. 7.9. 单元测试
    10. 7.10. 处理 Result
    11. 7.11. 电子邮件格式
    12. 7.12. 基于属性的测试
    13. 7.13. Payload 验证
    14. 7.14. 小结
  9. 8. 拒绝无效订阅者 第二部分
    1. 8.1. 确认邮件
    2. 8.2. EmailClient - 我们的的电子邮件传递组件
    3. 8.3. 可维护测试套件的框架和原则
    4. 8.4. 短暂回顾
    5. 8.5. 零停机部署
    6. 8.6. 数据库迁移
    7. 8.7. 发送确认邮件
    8. 8.8. 数据库事务
    9. 8.9. 小结
  10. 9. 错误处理
    1. 9.1. 错误的目的是什么
    2. 9.2. 操作员错误报告
    3. 9.3. 控制流错误
    4. 9.4. 避免 "泥球" 错误枚举
    5. 9.5. 谁应该记录错误
    6. 9.6. 小结
  11. 10. 简单的新闻通讯发送
    1. 10.1. 用户故事并非一成不变
    2. 10.2. 不要给未订阅用户发垃圾邮件
    3. 10.3. 所有确认订阅者都会收到新刊
    4. 10.4. 实现的策略
    5. 10.5. Body 结构
    6. 10.6. 获取已确认订阅者列表
    7. 10.7. 发送新闻邮件
    8. 10.8. 存储数据的验证
    9. 10.9. 简单方法的局限性
    10. 10.10. 小结
  12. 11. 保护我们的 API
    1. 11.1. 鉴权
    2. 11.2. 基于密码的鉴权
    3. 11.3. 这安全吗
    4. 11.4. 插曲:后续步骤
    5. 11.5. 登录表单
    6. 11.6. 登录
    7. 11.7. 会话
    8. 11.8. 种子用户

在Rust中从零到生产 简体中文版

拒绝无效订阅者 第二部分

  • 确认邮件
  • EmailClient - 我们的的电子邮件传递组件
  • 可维护测试套件的框架和原则
  • 短暂回顾
  • 零停机部署
  • 数据库迁移
  • 发送确认邮件
  • 数据库事务
  • 小结