网站建设方案开发,家居网站页面设计图片,网站建设都用哪些软件,wordpress腾讯cos插件为了介绍使用ASP.NET Core构建GraphQL服务器#xff0c;本文需要介绍一下GraphQL#xff0c;其实看官网的文档就行。什么是GraphQL#xff1f;GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描… 为了介绍使用ASP.NET Core构建GraphQL服务器本文需要介绍一下GraphQL其实看官网的文档就行。 什么是GraphQLGraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述使得客户端能够准确地获得它需要的数据而且没有任何冗余也让 API 更容易地随着时间推移而演进还能用于构建强大的开发者工具。 官网地址https://graphql.org/中文网址(感觉不是官方的连HTTPS都不是)http://graphql.cn/GraphQL来自Facebook它于2012年开始开发2015年开源。 GraphQL与编程语言无关可以使用很多种语言/框架来构建Graph 服务器包括.NET Core。像GithubPinterestCoursera等公司都在使用GraphQL。 Github的API到目前有4个版本第三个版本都是用的是REST而第四个版本使用的是GraphQL。 GraphQL到底是什么这就是一个GraphQL查询的例子。左边是查询右边是结果。从这个例子可以看出查询是可以嵌套的所以使用GraphQL的客户端可以通过一次请求获得所有需要的数据。 每当对GraphQL服务器进行查询的时候这些查询首先都会依据一个类型系统对其进行验证。每个GraphQL服务都会在GraphQL schema里定义类型信息。可以把这个类型系统看作是你的API数据的蓝本它由你定义的一系列对象所支撑。例如这个User对象 GraphQL经常被称作是一个声明式数据获取语言。 GraphQL的设计原则分层结构GraphQL的查询是有层次结构的字段可以内嵌其它字段查询和返回数据的结构是一致的。以产品中心GraphQL是由客户端所需要的数据所驱动语言和运行时也支持客户端。强类型GraphQL服务器由GraphQL类型系统所支撑。在schema里每个数据点都有一个特定的类型针对这个类型还有验证。客户端定制查询GraphQL服务器提供了可以让客户端进行定制查询的能力。内省(introspective)客户端可以查询GraphQL服务器的类型系(schema)。 为什么使用GraphQL谈起GraphQL总是离不开REST。如果您想了解REST in ASP.NET Core请看我写的这个系列文章https://www.cnblogs.com/cgzl/p/9178672.html#restREST有几个问题过度获取REST里GET请求的查询结果通常比较大并且超过了客户端的需求这里我只需要nameheight和mass但是却返回了所有的字段。 而使用GraphQL我只需要查询我需要的数据 获取不足使用REST时我想获取部门和部门的人员通常我需要先请求查询部门列表然后遍历返回的部门列表再次发出请求查询每个部门下的人员所以是N1查询。而使用GraphQL我就可以通过一个查询请求嵌套的取得相应的结果。 不灵活随着API的演进REST需要随时创建新的端点所以REST API的端点增长速度很快此外有版本和兼容性需要谨慎考虑。而GraphQL典型的结构是只有一个端点。这个单端点就像API网关一样组织了多个数据源这样就会更简单。 综上使用GraphQL的好处是避免多重REST请求向下兼容无需考虑版本可以对现有的数据源(例如REST API)进行包装与开发语言无关 GraphQL查询我通过Github的GraphQL Explorer来进行演示网址是https://developer.github.com/v4/explorer/登录之后其效果如下Github使用了graphiqlgraphiql是一个浏览器内的IDE它可以用来浏览和查询GraphQL。graphiql的网址是https://github.com/graphql/graphiql。下一篇文章我也会在.NET项目里安装这个graphiql。graphiql只是用来浏览查询GraphQL的一个浏览工具而已其它比较流行的工具还包括GraphQL Playground 和 GraphQL Voyager等。 第一个查询打开Github的GraphiQL以后自动加载了一个查询语句我们点击运行按钮右侧就会返回查询的结果 在这里我查询了浏览者 viewer这个字段当前浏览该网页的就是我自己在查询里我还包括了viewer下的login字段也就是登录名。结果以JSON形式返回其数据包含在data属性下结构和查询结构一致。 如果我还想在查询中包含浏览者的姓名那就加一个字段即可 GraphQL的查询也可以有注释 GraphiQL的智能提示GraphiQL是具有智能提示的功能的。当你输入一个字母之后就是这种效果 如果你什么都不输入还想知道有哪些字段那么就按Alt空格但是在windows上多少还是有些问题的因为Alt空格也会弹出浏览器的菜单?。。。。 其实前面那个query关键字在这里是可以省略的点击prettify之后就会把query关键字去掉并且如果您的查询格式比较乱的话点击prettify也会对查询进行格式化 查询参数 在GraphQL里每个字段都可以有自己的参数。 直接看例子。下面这个例子里我想查询登录名为facebook的仓库所有者括号里就是查询参数这个参数的作用就是过滤数据返回login字段等于facebook的仓库所有者。 再看一个例子这次我要查询repository参数是name参数值是graphql点击查询注意查询语句里有红色波浪线。不出意外返回的了错误。所有的错误请求的返回结果都是这个格式的。 错误信息里告诉我们要查询repository这个字段必须要提供owner这个参数那么我们就加上这个参数这次终于返回了正确的结果。 也可以再添加几个字段 GraphQL Schema上面我介绍了几个查询的例子下面我介绍一下这个查询的后台工作原理。上面这些字段的设定是由GraphQL的schema来决定的。Schema提供了你的数据中所有使用的对象类型。它制定了所有值的类型。 打开Github的Graphiql右侧有个Docs按钮也就是文档每当我们定义了一个schema之后文档就会自动生成。 打开Docs可以看到两种操作类型Query查询也就是用来获取数据的。Mutation变化也就是用来更新数据的。 点击Query进去后我们可以在这里看见之前进行的那些查询 那么就点击一下刚才的repository这个查询可以看到这个查询需要两个参数owner和name类型都是字符串。 再返回到Query仔细看一下那些和字段在一起的黄色字体的东西这些就是类型。在类型里有的是常见的类型例如StringIntFloatBooleanID。 输入类型和返回类型当定义schema的时候我们也会相应的定义所允许的输入类型它们可以是参数类型或字段类型。输入类型可以是IntFloatStringBooleanNullEnumListObject。例如后边的叹号表示该参数是必须的。 冒号后边的部分就是返回类型 当我们定义好Schema之后文档就生成了所以GraphQL是自我生成文档的。 查询Schema除了看文档之外你可以直接查询schema这点在我们不使用graphiql的时候尤其有用。这个查询里我们要查的是__schema字段然后是它下面的queryType字段queryType将会返回schema下所有的查询然后我再查询queryType下的name和description点击运行就会看到右边的结果name是Query描述是它是Github GraphQL接口的query root。这个结果和文档里的描述是一样的下面再加上fields字段看看这个结果的fields字段就包括很多内容了codeOfConductlicense等等。而这些就是root query所有支持的字段。 查询Type除了查询schema外另一个有用的查询就是Type的查询。例子查询Repository这个类型的相关信息查询__type字段带着参数name为Repository这个查询结果也和文档里的一致我就不贴图了。 别名当我使用不同的参数来查询两个同样的字段的时候会报错的 时就应该使用别名了。添加别名只需要在字段前边加上别名和冒号即可这回查询就没有错误了。 Fragment上面的例子里graphql和aspnethome都查询的是相同的几个字段。这样的输入就有点重复了这时我们就可以使用Fragment。Fragement是可重用的字段集合它可以根据需要被包含在查询里。上面的例子使用fragement以后就是这样最下面是fragment的定义使用fragment关键字然后跟着自定义的名称它作用于Repository这个类型大括号里就是需要查询的字段。在查询里使用fragment时需要用三个点...它的作用相当于js里的展开操作符把fragment里面的字段展开到相应的查询里。fragment在GraphQL里使用的非常多。 今天先到这。