首页 > 其他分享 >GraphQL(二)- Schema 和 Resolver

GraphQL(二)- Schema 和 Resolver

时间:2023-01-16 16:13:24浏览次数:60  
标签:String Character myField GraphQL Resolver Schema

在GraphQL中,Schema和Resolver是两个非常重要的概念,是编写GraphQL Server的2个基本单元
本文介绍GraphQL中的Schema和Resolver。

Schema

Schema定义了GraphQL中基于graph的数据格式
参考: https://graphql.org/learn/schema/

Type语言

GraphQL 服务可以用任何语言编写。由于我们不能依赖特定的编程语言语法(如 JavaScript)来讨论 GraphQL 模式,因此我们将定义自己的简单语言。我们将使用“GraphQL 模式语言”:它类似于查询语言,并允许我们以与语言无关的方式讨论 GraphQL 模式。

如用type定义一个对象:

type Book {
    title: String!
    author: String!
    price: Float
    year: Int
}

类型后加!代表这个属性是对象必不可少(Non-Nullable)的,否则是optional的

在object定义中,Query,Mutation和Subscription是不可用做类名的,而typedef这3者则定义了该schema中的Query,Mutaion和Subscription。

Scalar类型

GraphQL提供了5种基本数据类型,分别为:

  • String UTF‐8 字符序列。
  • Int 有符号的 32 位整数。
  • Float 有符号的双精度浮点值。
  • Boolean true/false
  • ID ID 标量类型表示唯一标识符,通常用于重新获取对象或作为缓存的键。ID 类型的序列化方式与字符串相同,但是,将其定义为ID表示它不是可读的。

Enum

type中枚举类型的定义:

enum Days_of_Week{
   SUNDAY
   MONDAY
   TUESDAY
   WEDNESDAY
   THURSDAY
   FRIDAY
   SATURDAY
}

注意数据传递后,枚举类型的内容会变成与枚举变量名字相同的String而不是Int

Array

Schema支持数组,经过数组可以批量Query数据,resolver也可以处理数组中的数据过滤等操作

type Character {
  name: String!
  appearsIn: [Episode]!
}

下面显示!分别定义在数组和数据类型之后的差别:

myField: [String!]

myField: null // valid
myField: [] // valid
myField: ['a', 'b'] // valid
myField: ['a', null, 'b'] // error`

myField: [String]!

myField: null // error
myField: [] // valid
myField: ['a', 'b'] // valid
myField: ['a', null, 'b'] // valid

Interface

和其它语言的面向对象概念一样,graphql也引入了继承的概念,
Interface作为一种抽象类型存在,想要使用必须由实体的type继承。

interface Character {
  id: ID!
  name: String!
  friends: [Character]
  appearsIn: [Episode]!
}

type Human implements Character {
  id: ID!
  name: String!
  friends: [Character]
  appearsIn: [Episode]!
  starships: [Starship]
  totalCredits: Int
}

type Droid implements Character {
  id: ID!
  name: String!
  friends: [Character]
  appearsIn: [Episode]!
  primaryFunction: String
}

Union

Schema中也支持Union类型作为多种类型的Union使用

union SearchResult = Human | Droid | Starship

Input

到目前为止,我们只讨论了将Scalar(如枚举或字符串)作为参数传递到字段中。但您也可以轻松传递复杂对象。这在突变的情况下特别有价值,因为您可能希望传入要创建的整个对象。在 GraphQL 模式语言中,输入类型看起来与常规对象类型完全相同,但使用关键字input

input ReviewInput {
  stars: Int!
  commentary: String
}
mutation CreateReviewForEpisode($review: ReviewInput!) {
  createReview(review: $review) {
    stars
    commentary
  }
}

Resolver

Resolver是为 GraphQL 查询生成响应的函数集合。简单来说,Resolver充当 GraphQL 查询处理程序。GraphQL 模式中的每个Resolver函数都接受四个位置参数,如下所示 -

fieldName:(root, args, context, info) => { result }

Resolver函数的示例如下所示 -

//resolver function with no parameters and returning string
greeting:() => {
   return "hello from TutorialsPoint !!!"
}

//resolver function with no parameters and returning list
students:() => db.students.list()

//resolver function with arguments and returning object
studentById:(root,args,context,info) => {
   return db.students.get(args.id);
}

下面给出的是参数及其描述 -

  • root 包含从父字段上的解析程序返回的结果的对象。
  • args 一个对象,其中包含传递到查询中的字段的参数。
  • context 这是特定查询中所有解析程序共享的对象。
  • info 它包含有关查询的执行状态的信息,包括字段名称、从根到字段的路径。

标签:String,Character,myField,GraphQL,Resolver,Schema
From: https://www.cnblogs.com/Asp1rant/p/17055655.html

相关文章

  • GraphQL (一)简介
    GraphQL是Facebook创造的基于Graph的API查询语言,本文开始对GraphQL进行学习。本文介绍GraphQL的基本概念以及一个简单的ApolloServer实例GraphQL简介graphql是一种用......
  • Schema是什么
    Schema是什么 数据库中的Schema在SQL环境下,schema就是数据库对象的集合,所谓的数据库对象也就是常说的表,索引,视图,存储过程等。所谓的数据库对象也就是......
  • Ubuntu 2022.04版本安装libsdl2-dev出现E: Error, pkgProblemResolver::Resolve gener
    $sudoapt-getinstalllibsdl2-devReadingpackagelists...DoneBuildingdependencytree...DoneReadingstateinformation...DoneSomepackagescouldnotbe......
  • Django报错No module named django.core.urlresolvers
    当需要测试django能否解析网站根路径的URL,并将其对应到我们编写的某个视图函数上时,使用下面的语句fromdjango.core.urlresolversimportresolve执行代码时出现错误......
  • Abp 框架统一设置表名前缀和 Schema
    Abp框架统一设置表名前缀、Schema太长不看版:对于内置表,在所有启动项目(不包括XXX.DbMigrator)的Program.cs文件和XXXDbContextFactory中,设置AbpCommonDbProperties......
  • ExceptionHandlerExceptionResolver详解
    ExceptionHandlerExceptionResolver是SpringWebMVC中使用最简单、最常用的异常处理器之一,可以进行全局异常统一处理。在项目初始化时,ExceptionHandlerExceptionResolver......
  • Schema
    资源类型Schema在/staging/src/k8s.io/api/apps/v1/types.go中定义了所有的资源类型。//DeploymentenablesdeclarativeupdatesforPodsandReplicaSets.typeD......
  • pg_graphql 1.0 发布了
    pg_graphql是supabse团队使用pgx扩展开发的pggraphql扩展,实际上官方的graphl支持是演变了好几个版本的,学习下官方博客的演变还是很值得的看看如何进行设计参考资料​​......
  • GraphQL使用
    GraphQL使用1.介绍GraphQL是一个开源的,面向API而创造出来的数据查询操作语言以及相应的运行环境。GraphQL给客户端自主选择数据内容的能力,客户端完全自主决定获取信息......
  • asp.netcore Authentication, schema
    1. code likethiswillreporterror:  builder.Services.AddAuthentication("dd").AddCookie("ddd");builder.Services.AddAuthorization();InvalidOperationE......