Expand description
DB Resolver trait — P2-1 修复 C-3:真实 DB resolver 集成
定义 GraphQL root field 与真实数据源(数据库/ORM)之间的桥接接口。
§设计
- 使用 boxed future 手动实现 async trait,避免引入 async-trait 依赖
- 调用方实现此 trait 后,通过
GraphQLServer::with_db_resolver注入 - 未注入 resolver 时,schema 回退到 mock 数据(向后兼容)
§使用示例
ⓘ
use sz_orm_graphql::resolver::{DbResolver, ResolverContext};
use std::sync::Arc;
struct MyDbResolver;
impl DbResolver for MyDbResolver {
fn resolve_query(
&self,
ctx: &ResolverContext,
) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<serde_json::Value, String>> + Send>> {
let field_name = ctx.field_name.clone();
let args = ctx.args.clone();
Box::pin(async move {
// 在此处执行真实数据库查询
Ok(serde_json::json!({"id": "1", "name": format!("{}_real", field_name)}))
})
}
}
let resolver = Arc::new(MyDbResolver);
let server = sz_orm_graphql::GraphQLServer::new(4000)
.with_schema(schema)
.with_db_resolver(resolver);Structs§
- Resolver
Context - Resolver 调用上下文 — 传递字段名、参数等信息给 resolver
Traits§
- DbResolver
- DB Resolver trait — P2-1 修复 C-3
Type Aliases§
- Shared
DbResolver - 类型别名:Arc 包装的 DbResolver