前言
GraphQL是一种用于 API 的查询语言。最初由Facebook开发,于2012年首次发布。GraphQL提供了一个易于使用的、强大的平台,为前端开发人员提供了更好的API查询和数据操作方式。GraphQL Schema是GraphQL的基础概念之一,是GraphQL API的核心组成部分之一。本篇文章将为你详细讲解GraphQL Schema的基本概念、使用方法和重要性。
什么是GraphQL Schema
GraphQL Schema是一种定义GraphQL API的方式。GraphQL Schema通常由类型定义和根解析器组成。GraphQL API的结构和内容可以通过类型定义和根解析器来描述和访问。GraphQL Schema可以用来确定哪些查询和变异操作可以被执行、哪些返回值可以被返回以及如何将值转换为适当的数据类型。
GraphQL Schema通常由type定义和根解析器组成。
Type Definition
GraphQL类型定义规范定义了一组对象类型,例如演员或电影,还包括一组标量类型,如字符串或整数。通过这些类型定义,您可以描述整个数据搜索模型。
Root Resolver
解析器是将请求映射到相关数据的组件。根解析器是一组解析器,用于解析graphql操作(查询或更新)的名称和参数。它们使用数据源来组装和返回数据。
GraphQL Schema的使用方法
GraphQL Schema定义如下:
type Query {
...
}
type Mutation {
...
}GraphQL API模式至少需要一个type Query类型定义,表示需要查询的对象或类型定义以及type Mutation,其中包含可能的更新操作。
例如,下面是一个将用户名作为参数的查询操作:
type Query {
user(username: String!): User
}这将返回一个类型为User的对象,该对象表示已查询的用户。
GraphQL Schema的重要性
GraphQL Schema使得API数据的返回类型、格式和关系易于映射和理解。 它们确保客户端应用程序的数据类型与返回数据格式的类型相一致。
使用GraphQL Schema的好处如下:
定义明确的API
使用GraphQL Schema,您可以明确定义每个API请求的返回格式。这有助于通过API访问的所有数据集成和一致性。
轻松更新
由于GraphQL API可以重新定义schema,因此更新和升级API变得更容易。 通过更新GraphQL Schema,您可以轻松添加、删除或修改API中的特定属性。
自展开文档
GraphQL Schema本身就是一种自展开的文档。 通过查看服务的Schema,您可以了解API中所有可能的选项和操作。
示例代码
下面是一个使用GraphQL Schema的示例代码。
使用type定义定义电影类型。
type Movie { id: ID! title: String! actors: [Actor!]! releaseYear: Int }使用type Query定义一个查找电影的查询操作。
type Query { movie(id: ID!): Movie }实现根解析器函数来查找与id匹配的电影。
const resolvers = { Query: { movie(parent, args, context, info) { return getMovieById(args.id); }, }, };在上面的代码中,
getMovieById()函数将使用ID参数在数据源中查找电影。在GraphQL API中使用schema和类型定义。
const schema = makeExecutableSchema({ typeDefs, resolvers, });或者使用官方JavaScript GraphQL库 Apollo Server 来定义 GraphQL 的 schema.
// www.javascriptcn.com code example const { ApolloServer, gql } = require('apollo-server'); const typeDefs = gql` type Movie { id: ID! title: String! actors: [Actor!]! releaseYear: Int } type Query { movie(id: ID!): Movie }
`;
const resolvers = { Query: { async movie(parent, { id }, { dataSources }) { return dataSources.moviesAPI.getMovieById(id); } } }
const server = new ApolloServer({ typeDefs, resolvers });
以上是一个简单的GraphQL Schema的示例。应该能够帮助您理解GraphQL Schema以及如何使用它来定义您的GraphQL API。 > 来源:[JavaScript中文网](https://www.javascriptcn.com/post/67d77a6aa941bf7134d679fe) ,转载请注明来源 [https://www.javascriptcn.com/post/67d77a6aa941bf7134d679fe](https://www.javascriptcn.com/post/67d77a6aa941bf7134d679fe)