首页 > 其他 > 详细

GraphQL-hotchocolate学习:Query操作查询函数映射

时间:2021-04-24 20:37:53      阅读:26      评论:0      收藏:0      [点我收藏+]

我本来计划使用RestfulAPI建立我自己的API服务框架,意外发现GraphQL更好,更有前途,于是决定使用GraphQL。

为什么呢?

因为虽然RestfulAPI号称是面向资源的,而本质上是面向操作的,比如get/put/post等,并且依赖于资源/函数名称(url),这些东西一旦变化,客户端也要跟着修改,所以面临版本管理和兼容性的问题。而GraphQL是面向数据的,可以按需获取,数据架构(Schema)确定之后,增加字段不会造成版本兼容问题。

这里面的区别比较微妙,可以参考https://graphql.cn/实际体验感受一下。

GraphQL只是一个协议,和具体的语言实现无关,我习惯于使用C#语言,所以找了一个.net的实现。

.Net的实现主要有GraphQL.NEThotchocolate两种,比较了一下,最终选择了后者,感觉比较简单一些。

关于Schema模型和查询对象之间的关系,文档中没有详细描述,做了一下实验,对应关系大概如下:

技术分享图片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace MyGraphQL
{
    public class GraphQLServices
    {
        public List<GraphQLService> Services { get; set; }
    }

    /// <summary>
    /// 一个GraphQL服务
    /// </summary>
    public class GraphQLService
    {
        /// <summary>
        /// 服务名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 服务地址,形如:"http://localhost:8888"
        /// </summary>
        public string Url { get; set; }

        /// <summary>
        /// 服务说明
        /// </summary>
        public string Describe { get; set; }
    }

    public class Query
    {
        public GraphQLServices GetGraphQLServices2
        {
            get
            {
                return this.GetGraphQLServices();
            }
        }
        public GraphQLServices GetGraphQLServices()
        {
            GraphQLServices graphQLServices = new();
            GraphQLService graphQLService = new();
            graphQLService.Name = "GraphQLService";
            graphQLService.Url = @"http://localhost:8888";
            graphQLService.Describe = "提供GraphQL的入口服务";
            graphQLServices.Services = new List<GraphQLService>();
            graphQLServices.Services.Add(graphQLService);
            return graphQLServices;
        }
    }
}
View Code

一个类的公共属性和方法,会被映射为查询的对象,例如上面的代码,GetGraphQLServices()函数映射为graphQLServices对象,如果函数不是Get开头,则直接映射为函数名;GetGraphQLServices2属性映射为getGraphQLServices2对象。如下图所示:

技术分享图片

 

GraphQL-hotchocolate学习:Query操作查询函数映射

原文:https://www.cnblogs.com/huzhongqiang/p/14697467.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!