GraphQL 简介

2025-06-10

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
PREV
Github 必须是一个免费平台 致 GitHub 的一封信
NEXT
精选终极 Java 资源列表 🧵 1.) Java IDE 2.) 学习 Java 的最佳网站 3.) Java 编码练习平台 4.) 面向 Java 开发人员的 YouTube 频道 5.) 学习 Java 的最佳课程 6.) Java 书籍 7.) 用于 Web 开发的 Java 框架 8.) Java GitHub 存储库 9.) Java 项目构想 10.) 最佳 Java 项目托管平台 11.) 可以阅读和获取 Java 更新的博客平台