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)

大家都在看

  • Ajax 技术(四)

    目的: 熟练掌握AJAX基础和XMLHttpRequest对象及其方法。 重点掌握AJAX发送请求的具体过程,及过程中的不同状态。 要求: 实现用户注册表单中,使用AJAX技术根据…

    Linux 2023年6月13日
    0125
  • MySQL — 数据控制语言

    DCL 全称 Data Control Language。数据控制语言,用来创建数据库用户、控制数据库的访问权限。 1、用户管理 select * from user; 只能在指定…

    Linux 2023年6月8日
    0116
  • 6.22(js–>案例应用)

    (练习1)简易计算器: <html lang="en"> <head> <meta charset="UTF-8&quo…

    Linux 2023年6月7日
    0140
  • 卡尔曼滤波(Kalman filter)(不完全介绍)

    1. Kalman filter基本介绍 卡尔曼滤波(Kalman filter)是一种高效的自回归滤波器,它能在存在诸多不确定性情况的组合信息中估计动态系统的状态,是一种强大的、…

    Linux 2023年6月14日
    0131
  • Windows10 下使用 telnet 命令

    正常情况下 windows 是使用不了 telnet 命令的: 打开控制面板-》程序和功能-》启用或关闭 Windows 功能 勾选 “Telnet客户端”…

    Linux 2023年6月13日
    0122
  • Python——装饰器(Decorator)

    1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上。和这个函数绑定在一起。在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函…

    Linux 2023年6月8日
    0175
  • shell脚本

    1、什么是shell 什么是shell ? Shell(外壳) 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言, 又是一种程序设计语…

    Linux 2023年5月27日
    0131
  • Python Docstring 风格和写法学习

    什么是Python Docstring 和Java类似,Python也通过注释形式的Docstring给程序、类、函数等建立文档。通过Docstring建立的文档不仅对人来说有更好…

    Linux 2023年6月14日
    0125
  • 面试连环炮系列(二十六):什么情况下JVM频繁发生full GC

    什么情况下JVM频繁发生full GC; 在实际项目什么代码导致full GC;线上怎么排查是哪个程序导致的ful GC 1. 什么情况下JVM频繁发生full GC?full g…

    Linux 2023年6月6日
    0150
  • Weblogic页面应用查询oracle数据库后台报错或页面日期格式显示错误

    问题:在生产环境中有两台WEB服务器,分别为227和228,部署的应用代码都是每日同步的,两边完全一致,但是某些页面查询数据时,227无结果,并且后台报java数组越界的错误,而2…

    Linux 2023年6月14日
    0113
  • 阿里云函数-爱奇艺签到

    简介 是否支持多账号:是消息推送平台:PUSHPLUS 代码 -*- coding: utf8 -*- import requests,random,string,hashlib,…

    Linux 2023年6月7日
    0109
  • Linux上安装并启动tomcat

    1、下载tomcat安装包 官网链接:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.57/bin/ 2、将tomcat上…

    Linux 2023年6月6日
    0162
  • dotnet诊断工具记录

    CPU爆高(cpu陡增,比如正常运行一般是x%的cpu,突然到了20% 30%甚至更高) 调试高 CPU 使用率 dotnet tool install –global dotn…

    Linux 2023年6月7日
    0122
  • 十、进程管理

    什么是进程?进程(Process)是一个程序在其自身的虚拟地址空间的一次执行活动。之所以要创建进程,就是为了使多个程序可以并发的执行,从而提高系统的资源利用率和吞吐量。简单来说进程…

    Linux 2023年6月7日
    0175
  • 什么是视频编码?编解码器和压缩技术

    想知道什么是视频编码,为什么它很重要? 在本文中,我们将研究编码、编解码器和压缩技术的过程。这包括什么使得一个推荐的编解码器,虽然是取决于情况。它还涵盖了为什么某些伪影,与压缩有关…

    Linux 2023年6月7日
    0139
  • CentOS8.4对home目录扩容

    在工作中会遇到home空间不足的情况需对其扩容 一、添加新硬盘 我的环境是虚拟机,首先为其添加一块16G的硬盘 进入机器首先 df -h 看一下发现CentOS8.4默认使用逻辑卷…

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