发布于 2025-12-10 1 阅读
0

GraphQL 简介

GraphQL 简介

介绍

我们一直在使用 REST 架构来构建 API。这种架构至今仍被广泛使用,但它也存在一些问题。REST 存在一些问题,例如:必须使用多个 URL 以及过度获取数据。我们需要一个解决方案来获取所需的精确数据,而不是获取一堆我们无法触及的庞大对象。这正是 GraphQL 发挥作用的地方。

什么是 GraphQL

GraphQL 是由 Facebook 开发的一种开源查询语言。GraphQL
凭借其强大的查询语法,将数据以图的形式组织起来。由于数据的结构类似于图,我们可以像图一样对数据进行排序:遍历、检索和修改数据。它为我们提供了一种更高效的方式来设计、创建和使用 API。在后端,GraphQL 本质上是创建一个中间人服务来过滤我们从 API 中获取的内容。通过这种方式,它避免了数据过度获取和使用多个 URL。

GraphQL 入门

要工作,GraphQL 需要一个服务器和一个客户端。我们来谈谈服务器。我们可以将 graphQL 连接到 Node 服务器或任何其他类型的服务器。连接后,我们实际上会创建一个 Node/GraphQL 服务器或 Express/GraphQL 服务器。现在让我们使用 Express 来实现这一点。首先要做的是创建一个基本的 Express 服务器。接下来,我们需要创建一个 Express GraphQL 服务器。这
需要一个名为 express-graphql 的插件来创建一个 /graphql 端点。

设置服务器

const express = require('express')
const app = express()
const { graphqlHTTP } = require('express-graphql')

var schema = buildSchema(`
  type Query {
    welcome: String
  }
`);
// root gives us a resolver
var root = {
  welcome: () => {
    return 'Welcome to the GraphQL World!';
  },
};
app.use('/graphql', graphqlHTTP( req => {
  return {
   schema: schema,
   rootValue: root,
   graphiql: true,
  }
}))
app.listen(3000)
console.log('Listening')

使获取数据更加高效

向 API 发送请求可能会返回超出我们实际需要的数据。GraphQL 允许我们向 API 发送查询来获取所需的数据。它限制了应该从服务器获取的数据。让我们来看一个查询数据的示例。

获取数据示例

// basic query
{
   students {
      id
      firstName
   }
}

// Result of the query

{
   "data": {
      "students": [
         {
            "id": "1",
            "firstName": "Paula"
         },
         {
            "id": "2",
            "firstName": "Greg"
         },
         {
            "id": "3",
            "firstName": "Stephanie"
         }
      ]
   }
}

避免使用多个 URL

GraphQL 可以在单个请求中查询多个关系数据。这减少了对多个 URL/端点的需求。GraphQL 正是通过这种方式利用了选择性端点。
我们来看一个例子

谁需要多个 URL?示例

// multiple url query
{
   student(id: "10"){
      firstName
      lastName
      college{
         name
         location
      }
   }
}

/// result
{
   "data": {
      "students": [
         {
            "firstName": "Max",
            "lastName": "Kelly",
            "college": {
               "name": " University",
               "location": "Alabama"
              }
         },
   }
}

通常我们需要向多个 URL 发送请求,但使用 GraphQL 我们只需一个请求即可完成此操作。

架构示例

type Query {
  Students[Students!]!
}

type Mutation {
  createStudent(collegeId:ID,firstName:String,lastName:String):String 
  updateStudent(collegeId:ID,firstName:String,lastName:String): Student!    
  deleteStudent(collegeId: ID!): Student!   
}

type Student {
   id:ID!
   firstName:String!
   lastName:String!
   college:College
}

type College {
   id:ID!
   name:String!
   location:String
   students:[Student]
}

在这个模式中,我们设置了请求数据时的数据外观。我们还设置了一个可选的变更,以便我们实现对数据的修改。

突变

查询中的变更是可选的。它们相当于 REST 中的 CRUD 应用程序。变更是指我们修改服务器上的数据并获取更新后的数据的方式。通过这些变更,我们可以:创建、更新和删除数据条目。

结论

总而言之,GraphQL 使我们能够更轻松地选择从外部 API 接收的数据。GraphQL 与语言无关,因此可以轻松地与任何类型的语言集成。GraphQL 可以使用其中一些相同的技术和模式与数据库进行交互。尽管它的类型似乎更适合文档数据库,但它与文档数据库和关系数据库都能很好地兼容。

鏂囩珷鏉ユ簮锛�https://dev.to/neisha1618/an-introduction-to-graphql-462p