study - GraphQL

官网

Schema

  • Schema定义了字段的类型、数据的结构,描述了接口数据请求的规则
  • Schema 使用一个简单的强类型模式语法,称为模式描述语言(Schema Definition Language, SDL)⬇️

SDL(Schema Definition Language)

  • GraphQL有其自己的语言来编写GraphQL模式:GraphQL模式定义语言(SDL)
  • SDL使用简单直观,同时功能强大且富有表现力

什么是GraphQL模式定义 ❓

  • GraphQL模式定义是指GraphQL模式的最简洁的方法
  • 语法定义明确,是GraphQL官方规范的一部分
  • 架构定义有时称为IDL(接口定义语言)或SDL(架构定义语言)

模式定义的主要组成部分⬇️

  • Type - 类型

    A type has a name and can implement one or more interfaces(类型具有名称,并且可以实现一个或多个接口)

    type Post implements Item {
      # ...
    }
    
  • Field - 字段

    A field has a name and a type(字段具有名称和类型)

    • 基本字段

      age: Int
      
    • 不可为空的字段用感叹号表示⬇️

      age: Int!
      
    • 列表用方括号表示

      names: [String!]
      

Type

  • Scalar

    Scalar 是解析到单个标量对象的类型,无法再进行次级选择(不含子字段,不可拆分)
    • 默认标量类型
      • Int
      • Float
      • String
      • Boolean
      • ID
    • 自定义标量类型
      • 例如: 定义一个 Url 类型:scalar Url,然后在实现中定义如何将其序列化、反序列化和验证。
  • Object

    Schema 中的最基本的组件是对象,Schema 中的大多数类型都是对象类型。对象由子字段组成
type Story {
    id: ID!
    author: user
    comments(after: ID, limit: Int = 5): [Comment]
}

说明⬇️

  • id、author和 comments 是 Story 对象的字段。这意味着在操作 Story 对象的操作中,最多只能出现这三个字段

  • ID! 表示这个字段是非空的,GraphQL 服务会保证只要你查询这个字段,就一定会收到值

  • [Comment] 表示这个字段是一个由 Comment 组成的列表

GraphQL 服务端的应用代码的基本实现流程⬇️

  • 定义Schema(每一个 Schema 中允许出现三种根类型:query,mutation,subscription,其中至少要有 query)

    schema {     //表示这是一个GraphQL schema定义
     query: Query    //定义查询操作,必须有
     mutation: Mutation    //定义变更操作,可以省略
     subscription: Subscription   //定义订阅操作,可以省略
    }
    
  • 定义根类型(名字随意,和 Schema 中一致即可)

    type Query {
        user(id: ID): User
        viewer: User
        stories(after: ID, limit: Int = 10): [Story]!
    }
    
    type Mutation {
        ...// 暂时省略
    }
    
    type Subscription{
        ...// 暂时省略
    }
    
  • 定义用户自定义类型(类型的每个字段都必须是已定义的,且最终都是 GraphQL 中定义的类型)

    interface Human {
     id: ID!
     name: String
     age: Int
    }
    
    scalar Url //标量类型
    
    type User implements Human { 
     id: ID!
     name: String
     age: Int
     is_active: Boolean
     friends: [User]!
     website: Url
     lastStoryPosted: Story
    }
    
    type Story {
        id: ID!
        author: user
        comments(after: ID, limit: Int = 5): [Comment]
    }
    

每次调用 GraphQL 服务时,需要:

  • 明确指定调用 Schema 中的哪个根类型(默认是 query)
  • 然后指定这个根类型下的哪几个字段(每个字段对应一个用户自定义类型)
  • 然后指定这些字段中的那些子字段的哪几个。一直到所有的字段都没有子字段为止

猜你喜欢

转载自blog.csdn.net/LLLLLLLLLLe/article/details/102875013