让ASP.NET Core支持GraphQL之-GraphQL的实现原理 (2)

针对上面的例子,实际上只有string Query属性被反序列化为”"# Write your query or mutation here\nquery test{\n user{\n age\n }\n}\n"“

3.服务端解析Query,解析Query的过程是一个语法分析的过程,通过Paser将Query解析为AST: var source = new Source(body); var result = _parser.Parse(source);

Parse后的结果是一个Document类:

public class Document : AbstractNode { public string OriginalQuery { get; set; } public Operations Operations { get; } public Fragments Fragments { get; } }

本例的Query将会被解析为一个Operations,一个Operations将包含若干个有层次结构的Operation,解析Query的目的是为了知道客户端要查询hero.Name和hero.Height两个属性。

4.有了一个Parse后的Document,接下来的工作将有DocumentExecuter来完成,DocumentExecuter定义了整个调用服务端资源的流程: public async Task<ExecutionResult> ExecuteAsync(ExecutionOptions options) { //1. 打印开始时间 //2. Parse Document //3. 验证Document是否是一个合法的GrapQL语法请求 //4. 在流程的各个阶段执行Listener,用于在不同的时机切入代码,类似于ASP.NET Core中的Filter //5. 选择合适的执行策略 //6. 执行服务端资源 //7. 输出Response }

以上就是GraphQL在.NET Core中的实现原理分析,下一篇将通过一个hello world级别的例子演示如何让你的ASP.NET应用程序支持GraphQL.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspyjj.html