mcpField
M
moai-domain-backend

moai-domain-backend

github.com/modu-ai开发1.2k132 次安装今天更新
代码仓库

关于 moai-domain-backend

面向后端开发者的技能,帮助设计 API、数据访问和服务架构,涵盖 API 框架、数据库、微服务、安全、缓存与性能模式。

主要功能

  1. 01REST、GraphQL 和 gRPC API 模式
  2. 02数据库集成模式
  3. 03微服务与事件驱动设计
  4. 04身份验证与授权
  5. 05缓存与性能优化

适用场景

  1. 01设计后端 API
  2. 02将数据库集成到服务中
  3. 03实现微服务
  4. 04加强安全性与性能实践

MCP 相关

README 将 MCP 服务开发模式列为相关技能,但未说明本项目自身的 MCP 功能。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/modu-ai/moai-adk --skill moai-domain-backend

安装后在 Claude Code 中输入/moai-domain-backend确认已加载。

详细介绍

后端开发专家

快速参考

后端开发精通指南——全面介绍后端开发模式,涵盖 API 设计、数据库集成、微服务和现代架构模式。

核心能力:

  • API 设计:使用 OpenAPI 3.1 设计 REST、GraphQL、gRPC API
  • 数据库集成:PostgreSQL、MongoDB、Redis、缓存策略
  • 微服务:服务网格、分布式模式、事件驱动架构
  • 安全:身份验证、授权、符合 OWASP 标准
  • 性能:缓存、优化、监控、扩展

适用场景:

  • 后端 API 开发与架构设计
  • 数据库设计与优化
  • 微服务实现
  • 性能优化与扩展
  • 后端系统安全集成

实现指南

API 设计模式

RESTful API 架构:

创建一个带有身份验证和响应模型的 FastAPI 应用。定义一个包含 id、email 和 name 字段的 Pydantic UserResponse 模型。使用 HTTPBearer 安全依赖项实现 list_users 和 create_user 端点。列表端点返回 UserResponse 对象列表,而创建端点接受一个 UserCreate 模型并返回单个 UserResponse。

GraphQL 实现:

使用 Strawberry 定义 GraphQL 类型。创建一个包含 id、email 和 name 字段的 User 类型。定义一个 Query 类型,其中包含异步返回 User 对象列表的 users 解析器。将 Query 类型传递给 strawberry.Schema 以生成架构。

数据库集成模式

使用 SQLAlchemy 连接 PostgreSQL:

使用 declarative_base 定义 SQLAlchemy 模型。创建一个 User 模型,其中 id 为主键,email 为唯一字符串,name 为字符串列。配置引擎的连接池参数,包括 pool_size 为 20、max_overflow 为 30,并启用 pool_pre_ping 进行连接健康检查。

使用 Motor 连接 MongoDB:

创建一个以 AsyncIOMotorClient 初始化的 UserService 类。在构造函数中设置数据库和 users 集合。为 email(唯一)和 created_at 字段创建索引。实现 create_user 方法,插入文档并将 inserted_id 作为字符串返回。

微服务架构

使用 Consul 进行服务发现:

创建一个连接到 Consul 的 ServiceRegistry 类。实现 register_service 方法,用名称、ID、端口和健康检查端点注册服务。实现 discover_service 方法,查询健康服务并返回 address:port 字符串列表。

事件驱动架构:

使用 aio_pika 创建一个用于 AMQP 消息传递的 EventBus 类。实现 connect 方法以建立连接和通道。实现 publish_event 方法,将事件类型和数据序列化为 JSON,并将其发布到默认交换机,routing_key 与事件类型相同。


高级模式

缓存策略

Redis 集成:

创建一个连接 Redis 的 CacheManager 类。实现一个接受 ttl 参数的 cache_result 装饰器。该装饰器根据函数名称和参数生成缓存键,在 Redis 中检查缓存结果;若缓存未命中,则执行函数并存储结果,同时设置过期时间。使用 json.loads 和 json.dumps 进行序列化。

安全实现

JWT 身份验证:

创建一个使用 CryptContext 进行 bcrypt 密码哈希的 SecurityManager 类。使用该上下文实现 hash_password 和 verify_password 方法。实现 create_access_token 方法,使用 HS256 算法编码带有过期时间的 JWT。若未指定,默认过期时间为 15 分钟。

性能优化

数据库连接池:

创建一个经过优化的 SQLAlchemy 引擎,使用 QueuePool,设置 pool_size 为 20、max_overflow 为 30、启用 pool_pre_ping,并将 pool_recycle 设为 3600 秒。添加 before_cursor_execute 和 after_cursor_execute 事件监听器,以跟踪查询耗时。对超过 100 毫秒阈值的查询记录警告。


适配良好

  • moai-domain-frontend - 全栈开发集成
  • moai-domain-database - 高级数据库模式
  • moai-foundation-core - 后端服务的 MCP 服务开发模式
  • moai-foundation-quality + moai-ref-owasp-checklist - 安全验证与合规
  • moai-foundation-core - 核心架构原则

技术栈

主要技术:

  • 语言:Python 3.13+、Node.js 20+、Go 1.23
  • 框架:FastAPI、Django、Express.js、Gin
  • 数据库:PostgreSQL 16+、MongoDB 7+、Redis 7+
  • 消息队列:RabbitMQ、Apache Kafka、Redis Pub/Sub
  • 容器化:Docker、Kubernetes
  • 监控:Prometheus、Grafana、OpenTelemetry

集成模式:

  • 使用 OpenAPI 3.1 的 RESTful API
  • 使用 Apollo Federation 的 GraphQL
  • 用于高性能服务的 gRPC
  • 使用 CQRS 的事件驱动架构
  • API 网关模式
  • 熔断器与弹性模式

状态:可用于生产环境 维护者:MoAI-ADK 后端团队

常见的自我开脱

自我开脱事实
“输入验证可以在前端进行”前端验证用于改善用户体验,后端验证用于保障安全。两者用途不同,缺一不可。
“这个端点是内部的,不需要身份验证”已遭入侵的服务可以访问内部端点。零信任意味着每个端点都必须验证身份。
“我之后再添加错误处理”未处理的错误会泄露堆栈跟踪、连接字符串和内部状态。错误处理是从第一天起就要做的工作。
“ORM 会处理 SQL 注入”ORM 能保护参数化查询。原始查询、动态筛选条件和 ORDER BY 子句仍需转义。
“这个 API 向后兼容,不需要升级版本”删除可选字段、更改默认值或修改错误格式,都会破坏现有调用方的兼容性。
“微服务太复杂了,我只要再加一个端点就行”端点无节制地增长会造出一个伪装成微服务的单体。添加端点前应先评估服务边界。

海勒姆定律:用户数量足够多时,总会有人依赖 API 的每一种可观察行为。无论改动多么微小,都可能导致某些用户无法使用。

危险信号

  • API 端点接受用户输入,却未进行验证或净化
  • 错误响应包含堆栈跟踪或内部路径信息
  • 数据库凭据硬编码在源代码中,而非环境变量中
  • 面向公众的端点未配置速率限制
  • API 在所有失败情况下都返回 200 OK,并在响应正文中包含错误信息
  • 使用字符串拼接构建原始 SQL 查询

验证

  • 每个端点在处理输入前都会进行验证(展示验证中间件或检查逻辑)
  • 错误响应采用标准格式,不包含内部详情(展示错误响应示例)
  • 凭据来自环境变量,而非配置文件(搜索硬编码的密钥)
  • 公共端点已配置速率限制(展示中间件注册代码)
  • 已记录并落实 API 版本管理策略
  • 数据库查询使用参数化语句(不使用字符串拼接处理用户输入)
  • 所有非公开端点都要求身份验证(展示身份验证中间件)

评论

支持 Markdown