GraphQL的模式和类型定义

GraphQL的模式是什么。

GraphQL API的规范表示。使用模式定义语言(SDL)来表示。在构建GraphQL API时,可以使用SDL来表示,而不受框架和编程语言的限制。
以下是使用SDL进行模式定义的示例。

type Book {
    id: ID!
    name: String
    pageCount: Int
    author: Author
}

type Author {
    id: ID!
    firstName: String
    lastName: String
}

如果要在Java中实现GraphQL,也可以通过以下Java代码进行定义(在Java以外的语言中也可以使用相应语言进行定义)。
https://www.graphql-java.com/documentation/master/schema/

GraphQL的类型
GraphQL类型的含义

在使用SDL定义模式时,存在一种重要的概念,即类型。GraphQL的类型与其他语言一样,用于识别数据的种类,如字符串、整数、布尔等。GraphQL主要有标量类型和对象类型两种。以下分别详细介绍。

标量类型

GraphQL中存在着以下5种标量类型。这5种统称为标量类型。

    • String(文字列型)

 

    • Int(整数型)

 

    • Float(浮動小数点型)

 

    • Boolean(論理型)

 

    ID(ID型)

在JSON中,Int和Float被表示为number。String和ID被表示为string。Boolean保持不变。此外,尽管ID类型的实际内容是字符串(String),但根据GraphQL规范,它必须是唯一的,与String类型有所区别。

对象类型

用一个以上的模式定义的字段集合被称为对象类型。可以像JSON一样进行嵌套。

使用上述提到的SDL样本进行总结,如下所示。

type Book {
    id: ID! ←スカラー型(ID)
    name: String ←スカラー型(String)
    pageCount: Int ←スカラー型(Int)
    author: Author ←オブジェクト型(下記Authorスキーマにあるようにフィールドの集合)
}

type Author {
    id: ID! ←スカラー型(ID)
    firstName: String ←スカラー型(String)
    lastName: String ←スカラー型(String)
}

定义一个枚举类型

在GraphQL中,您可以定义枚举类型(Enum)。通过定义枚举类型,可以确保返回其中定义的值之一(需要按照相应要求实现保证)。即使是不支持枚举类型的语言,GraphQL也允许定义Enum。

enum Color {
    RED
    YELLOW
    BLUE
    GREEN
}

type Apple {
    color: Color
}

列清单

您也可以在字段中定义类型列表。列表可以通过方括号来表示类型。以下是一个示例,其中包含一个具有字符串列表的模式。

type Department {
    id: ID!
    memberName: [String]
}

根本型

GraphQL 查询始于根类型。根类型表示对数据源的操作。具体如下所示。
※为了方便理解,以下使用SQL进行比较。

データソースに対する操作SQLGraphQLデータの取得SELECTQueryデータの登録INSERTMutationデータの更新UPDATEMutationデータの削除DELETEMutationデータ更新の監視-Subscription

GraphQL提供了使用套接字通信来监视数据更新的Subscription功能(在SQL中不存在)。
换句话说,Query、Mutation、Subscription被视为根类型。

联合类型(Union型)

Union types are types that return one of multiple types. In the following example, if the query specifies “agenda,” either StudyGroup or Workout will be returned. Types are connected with a pipe (|).

union AgendaItem = StudyGroup | Workout

type StudyGroup {
    name: String!
    subject: String
    students: [User!]
}

type Workout {
    name: String!
    reps: Int!
}

type Query {
    agenda: AgendaItem
}

定义架构的方式

使用SDL进行如下定义(定义文件的扩展名通常为.graphqls)。

基本定义 de

type Book {
    id: ID!
    name: String
    pageCount: Int
    author: Author
}

type Author {
    id: ID!
    firstName: String
    lastName: String
}

在 type 后面写入类型名称,并用大括号括起来。内部使用 “字段名: 类型名” 来表示(有关GraphQL的类型将在另外的帖子中讨论)。就像在 Book 字段中的 author 一样,可以将其他类型嵌套为嵌套结构。

惊叹号(!号)的意义

在上述的模式定義中,id字段的类型定义为「ID!」,意味着该字段后面带有一个感叹号(!)。带有感叹号的字段表示该字段永远不会为空。换句话说,就是在上述示例中,id字段永远不会为空,而其他字段可能为空。

列表中的感叹号(!号)

在列表中,感叹号可以有几种表示方法。以下示例中,它们被表示为[String],但也可以表示为[String!]、[String]!、[String!]!等形式。它们各自的含义如下所示。

type Department {
    id: ID!
    memberName: [String]
}
リストの宣言定義[String]nullかもしれないリストで中身もnullかもしれない文字列型[String!]nullかもしれないリストで中身はnullではない文字列型[String]!nullではないリストで中身はnullかもしれない文字列型[String!]!nullではないリストで中身もnullではない文字列型

以上就是。

请看/参考下方内容。

    • https://www.graphql-java.com/documentation/master/schema/

 

    • https://graphql.org/learn/schema/

 

    https://www.oreilly.co.jp/books/9784873118932/
广告
将在 10 秒后关闭
bannerAds