GraphQL全解析
  wMhEZ9FIjqrH 2023年11月02日 50 0

GraphQL全解析

GraphQL 是一个由 Facebook 开源的数据查询和操作语言,它可以大幅提高应用程序的性能和灵活性,并且非常适合构建 API。这篇文章将介绍 GraphQL 的基础知识、使用方法以及与 RESTful API 相比的优势。

什么是GraphQL?

GraphQL 允许您定义数据模型并根据此模型进行查询或修改数据。相对于传统的 RESTful API,GraphQL 更加灵活和精确地控制所需返回的数据。

在 GraphQL 中,请求者可以指定需要哪些字段、如何连接不同类型之间的关系以及希望使用哪种格式(例如 JSON 或 XML)来返回结果。而在传统 RESTful 风格中,则必须通过多个端点来获取不同资源,并且每个端点都有其特定格式和参数。

如何创建一个 GraphQL API?

要创建一个 GraphQL API,你需要完成以下三步骤:

  1. 定义 schema
  2. 实现 resolver
  3. 启动服务

定义 schema

首先,在 schema.graphql 文件中定义你想要暴露给外部调用者所能够使用到的所有 types 和 queries/mutations/subscription 等内容。

type Query {
  hello: String!
}

type Mutation {
  setName(name: String!): Boolean!
}

以上是一个简单的 schema 定义,包含了一个 Query 类型和一个 Mutation 类型。其中,hello 字段返回一个字符串类型,而 setName 字段接受一个字符串参数并返回布尔值。

实现 resolver

schema 中定义了可用于查询和修改数据的 API 接口,但要让这些接口真正能够起作用,则需要实现 resolver。resolver 是连接 schema 和数据源之间的桥梁,并负责处理所有 GraphQL 请求。

在 resolvers 文件夹中创建与 types 对应的文件,在里面编写对应 type 的解析函数即可:

const resolvers = {
  Query: {
    hello: () => "Hello World!"
  },
  Mutation: {
    setName: (parent, { name }) => {
      // 在此处进行数据库操作等其他逻辑
      return true;
    }
  }
};

以上代码为刚才定义的 schema 对应着两个 fields 提供了具体实现。

启动服务

将上述两项工作完成后,在服务器端启动 GraphQL 就可以愉快地使用它啦!你只需执行以下命令就可以启动服务:

$ npm install express graphql express-graphql --save-dev
import express from 'express';
import graphqlHTTP from 'express-graphql';

const app = express();

app.use(
  '/graphql',
   graphqlHTTP({
     schema,
     rootValue,
     graphiql:true,
   })
);

app.listen(3000);
console.log('Running a GraphQL API server at http://localhost:3000/graphql');

如何使用 GraphQL?

GraphQL 可以通过 HTTP 协议或 WebSocket 连接进行通信。客户端可以向服务器发送一个查询语句,然后服务器将返回与该查询匹配的数据。

查询

下面是一个简单的 GraphQL 查询:

query {
  hello
}

这个查询会请求 hello 字段并返回一个字符串类型的值 "Hello World!"

修改

要修改数据,则需要执行 mutation 操作。以下是一种更复杂的例子:

mutation {
  setName(name: "Bob") 
}

此操作将调用我们前面定义过了 setName 方法,并传入参数 { name: 'Bob' }。如果成功执行,则会返回布尔型值 true

GraphQL 相对于 RESTful 的优势

相比于传统的 RESTful API,GraphQL 具有以下优点:

  • 更少地发起网络请求:由于能够指定所需字段,因此无需从多个端点获取资源。
  • 精确控制所需响应内容:不再需要在服务端构建大量专门针对某些场景而编写的 endpoint。
  • 易于版本迭代:任何 schema 的更改都可以保证向后兼容性,并且旧接口仍然可用。
  • 自我描述性强:schema 中定义了所有可用 fields 和 types,使得开发者很容易理解和使用 API 接口。

总结

本文详细介绍了 GraphQL 的基础知识、使用方法以及与传统 RESTful API 相比的优势。通过本文,读者能够初步了解 GraphQL 并学习如何创建一个简单的 GraphQL 服务。如果想要进一步深入研究,请查看官方文档或参考其他相关资源。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  lh6O4DgR0ZQ8   2023年11月22日   26   0   0 Memory字段sed
  mcbWRrRPlhs5   2023年11月30日   28   0   0 访问令牌API应用程序