Fork me on GitHub

GraphQL:简单开开始一个查询

 

 

  GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

                                  ——出自 https://graphql.cn

  如果换个简单粗暴的说法就是:减少API中查询的代码。这对写api的程序员是个福音,那这时你肯定想,减少后,那功能会减少吗?其实正好相反,会增加查询场景。

  关于GraphQL的基础知识,可以通过https://grapql.cn来学习,这里不再赘述,当了解GraphQL基础知识后,这里要说明的是由Michael Staib主导的asp.net core上的GraphQL的实现。

 

  首先安装两个Nuget包

  HotChocolate.AspNetCore

  HotChocolate.Data

 

  在startup中注入graphql相关的实体类型 

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace GraphQLDemo00
{
    public class Startup
    {
       public void ConfigureServices(IServiceCollection services)
        {
            services
                .AddGraphQLServer()//引入GraphQL           
                .AddQueryType<Query>()//注入查询类型      
                .AddProjections()//映射字段
                .AddFiltering()//注入查询过滤器
                .AddSorting();//注入排序
        }       
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGraphQL();
            });
        }
    }
}

  定义查询

using HotChocolate.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GraphQLDemo00
{
    /// <summary>
    /// 查询类
    /// </summary>
    public class Query
    {
        /// <summary>
        /// 查询学生
        /// </summary>
        /// <returns></returns>
        [UseFiltering]
        [UseSorting]
        [UseProjection]
        public List<Student> GetStudents()
        {
            return new List<Student>
            {
                new Student { StuNo="N0001", Name="张三", Age=21, Sex=true },
                new Student { StuNo="N0002", Name="李四", Age=22, Sex=false  },
                new Student { StuNo="N0003", Name="王五", Age=23, Sex=true }
            };
        }
    }
    /// <summary>
    /// 学生实体
    /// </summary>
    public class Student
    {
        /// <summary>
        /// 学号
        /// </summary>
        public string StuNo { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }
        /// <summary>
        /// 性别
        /// </summary>
        public bool Sex { get; set; }
    }
}

  然后用http://localhost:5000/graphql,HotChocolate实现了一套UI

   也可以用Postman来访问(可见GraphQL正在流行起来)

 

 

{
    students(where:{ and:[{sex:{eq:true}}{age:{gt:21 }}]}){
        stuNo
        name
        sex
        age
        }
}

  GraphQL正是通过上面的语法来实现自定义查询,条件可以自由组合,返回的结果当然也是根据条件而来的,就像我们写SQL语句,select什么字段,where条件是什么,提升了灵活性,而不用每种查询我们都在后台代码中实现一下,这也正是它的重点。

 

  想要更快更方便的了解相关知识,可以关注微信公众号 
 

 

 

posted @ 2022-02-01 14:58  桂素伟  阅读(67)  评论(0编辑  收藏  举报