UWP graphql-dotnet新版数据查询客户端的实现

之前写过一篇文章 UWP GraphQL数据查询客户端的实现,这次的标题基本差不多,只不过微软这个graphql-dotnet repo从1.x升级到了3.x,跨度有点大。

如果你用之前的项目,直接升级,那么所有的方法都报错,因为微软已经完全重写了这个graphql的实现🤣🤣🤣

UWP graphql-dotnet新版数据查询客户端的实现

所以为了能够跟上最新的步伐,当然他们肯定还会改进,最终的目的还是向之前说的,Apollo框架那样,简单易用。

这次更新加入了变量的引用,更加人性化一点了。

为了方便测试,我找了一个公开的graphQL的api end point.

https://graphql-weather-api.herokuapp.com/

更多的在线地址,参考http://apis.guru/graphql-apis/

GraphQLHttpClient graphQLClient = new GraphQLHttpClient("https://graphql-weather-api.herokuapp.com/", new NewtonsoftJsonSerializer());
            var request = new GraphQLRequest
            {
                Query = @"query($name: String!){
                getCityByName(name:$name){
                    id
                    name
                    country
                    coord{
                        lon
                        lat
                        }
                    weather{
                        summary{
                            title
                            description
                            icon
                            }
                        temperature{
                            actual
                            feelsLike
                            min
                            max
                            }
                        wind{
                            speed
                            deg
                            }
                        clouds{
                            all
                            humidity
                            visibility
                            }
                        timestamp
                        }
                    }
                }",
                Variables = new
                {
                    name = "Beijing"
                }
            };

需要注意的一点是:

我们是根据name字段查询的,name的类型是String,并且非空,所以再query我们定义

$name: String!

如果有多个字段,那么需要一一列出

$id: Int!, $operation: OperationType!, $brand: String

其中OperationType为枚举。

当然这个query语句是加了变量了,变量在Variables种指定,你也可以按照之前的方式进行字符串拼接,不过使用变量语法出错的几率小很多。

然后执行query/mutation的语句是这样

//1. Define a reponse type
var graphQLResponse = await graphQLClient.SendQueryAsync(request);
//2. Alternatively you could use an anonymous type:
var graphQLResponse = await graphQLClient.SendQueryAsync(
                request, () => new { getCityByName = new GetCityByName() });

Debug.WriteLine(“raw response:”);
Debug.WriteLine(JsonSerializer.Serialize(graphQLResponse, new JsonSerializerOptions { WriteIndented = true }));

就这样,执行了之后就有结果了。

Model:

public class getCityByNameResponse
    {
        public GetCityByName getCityByName { get; set; }
    }

    public class GetCityByName
    {
        public string id { get; set; }
        public string name { get; set; }
        public string country { get; set; }

        public Coordinates coord { get; set; }
        public Weather weather { get; set; }
    }

    public class Weather
    {
        public Summary summary { get; set; }
        public Tempreature tempreature { get; set; }
        public Wind wind { get; set; }
        public Clouds clouds { get; set; }
        public long timestamp { get; set; }
    }

    public class Summary
    {
        public string title { get; set; }
        public string description { get; set; }
        public string icon { get; set; }
    }

    public class Tempreature
    {
        public float actual { get; set; }
        public float feelsLike { get; set; }
        public float min { get; set; }
        public float max { get; set; }
    }

    public class Wind
    {
        public float speed { get; set; }
        public int deg { get; set; }
    }

    public class Clouds
    {
        public int all { get; set; }
        public int visibility { get; set; }
        public int humidity { get; set; }
    }

    public class Coordinates
    {
        public float lon { get; set; }
        public float lat { get; set; }
    }

Original: https://www.cnblogs.com/hupo376787/p/13985624.html
Author: 猫叔Vincent
Title: UWP graphql-dotnet新版数据查询客户端的实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607078/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Golang环境安装

    一、下载地址 Golang: Downloads – The Go Programming Language GoLand编辑器: Download GoLand: A…

    Linux 2023年6月13日
    091
  • PHP实现无限级分类

    $array = array( array(‘id’ => 1, ‘pid’ => 0, ‘name’ => ‘河北省’), array(‘id’ => 2…

    Linux 2023年6月7日
    060
  • redis 订阅与发布

    Reference: https://redisbook.readthedocs.io/en/latest/feature/pubsub.html Redis 的 SUBSCRIB…

    Linux 2023年5月28日
    099
  • Linux之Keepalived高可用

    一、高可用介绍 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。 硬件通常使用:F5 软件通常使用:Ke…

    Linux 2023年6月14日
    0129
  • Linux 0.11源码阅读笔记-总览

    Linux 0.11源码阅读笔记-总览 阅读源码的目的 加深对Linux操作系统的了解,了解Linux操作系统基本架构,熟悉进程管理、内存管理等主要模块知识。 通过阅读教复杂的代码…

    Linux 2023年5月27日
    095
  • JVM 配置参数 -D,-X,-XX 的区别

    转载请注明出处: 最近在安全护网行动,需要针对服务进行不断的安全加固,如 对服务的 log4j 的安全配置进行防护,对 fastjson 的漏洞进行安全加固等,最快的防护方法就是通…

    Linux 2023年6月14日
    088
  • Linux常用磁盘管理命令详解

    du du命令用于查看文件和目录磁盘的使用空间。 命令语法: du [参数] [文件&amp…

    Linux 2023年5月27日
    0100
  • Linux安装mysql8.0

    MySQL 配置MySQL8安装源 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3….

    Linux 2023年6月6日
    085
  • 操作系统实战45讲-10 设置工作模式与环境:建立计算机

    实验环境: 虚拟机软件:VMware® Workstation 16 Pro虚拟机:Ubuntu 20.04 生产虚拟硬盘 用 dd 命令(用指定大小的块拷贝一个文件,并在拷贝的同…

    Linux 2023年6月7日
    098
  • 一步一图带你深入剖析 JDK NIO ByteBuffer 在不同字节序下的设计与实现

    让我们来到微观世界重新认识 Netty 在前面 Netty 源码解析系列 《聊聊 Netty 那些事儿》中,笔者带领大家从宏观世界详细剖析了 Netty 的整个运转流程。从一个网络…

    Linux 2023年6月6日
    097
  • 自动化服务器巡检的实现过程

    由于上级的工作安排,从今年5月开始,每天都要做一些服务器信息检查。 [En] Due to the work arrangement of the superior, it is …

    Linux 2023年5月27日
    085
  • Springboot Mybatis 集成 Redis

    添加 Redis 依赖 $xslt</p> <p>org.springframework.boot spring-boot-starter-data-red…

    Linux 2023年5月28日
    084
  • Redis

    Redis原创笑笑师弟 最后发布于2018-12-21 14:17:59 阅读数 1780 收藏展开目录 redis简介 redis功能 redis学习步骤 windows系统下的…

    Linux 2023年5月28日
    092
  • CentOS系统磁盘目录空间调整

    前几天装了几台linux服务器,安装操作系统的时候,选择了默认磁盘分区,结果导致后面主目录分区空间不够用了,需要把其他分区的空间划分给主分区一点。 下面以CentOS6.5演示: …

    Linux 2023年6月6日
    088
  • OpenStack cinder对接glusterfs存储

    一、创建虚拟机node1 自定义默认下一步稍后安装操作系统选择Linux,红帽6名称位置随意1核就行2G内存就行仅主机网络默认下一步默认下一步默认下一步30G,给单个文件添加一块5…

    Linux 2023年6月8日
    078
  • rpm 打patch

    1、把patch文件放入SOURCES中 2、修改SPECS中的XXX.spec,把下图中箭头的部分都要写上,这里是一个坑 3、最后安装rmp包的时候如果有问题加上–f…

    Linux 2023年6月13日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球