用声明式数据加载替代手动循环查询。
# Sprint has 10 tasks, each needs owner
for task in sprint.tasks:
task.owner = await get_user(task.owner_id)
# 10 queries!
class TaskView(BaseModel):
owner_id: int
owner: Optional[UserView] = None
def resolve_owner(self, loader=Loader(user_loader)):
return loader.load(self.owner_id)
# 1 query!
从加载关联数据到生成 GraphQL API — 一个库全覆盖。
通过 DataLoader 模式自动批量查询,100 次查询变 1 次。
在嵌套数据就绪后计算派生字段:计数、聚合、格式化。
ExposeAs / SendTo / Collector,无需手写遍历逻辑即可跨层传递数据。
集中管理关系声明,跨模型复用,同时驱动 GraphQL 和 MCP。
从 ER 图自动生成 GraphQL schema 和 resolver。
通过 MCP 协议将 GraphQL API 暴露给 AI 代理。
从简单开始,按需扩展。每个概念都建立在前一个之上。
ER 图同时充当实体层和用例层,干净地隔离数据库实现。
ER Diagram 定义实体及其关系,天然充当领域模型和用例边界。
Loader 抽象了数据源。从 SQLAlchemy 切换到 Django 或 Tortoise ORM,模型层无需改动。
一份 ERD 同时驱动 REST API 响应、GraphQL 查询和 MCP 服务,零重复。
与你现有的框架和 ORM 无缝集成。