首页 > web前端 > js教程 > 从 REST 到 GraphQL:我为何以及如何进行切换

从 REST 到 GraphQL:我为何以及如何进行切换

Susan Sarandon
发布: 2024-12-31 20:48:14
原创
977 人浏览过

作为一名拥有 4 年 REST API 构建经验的软件工程师,我一直很欣赏 REST 带来的简单性和可靠性。无论是设计端点还是构建响应,REST 都是我的首选解决方案。

但今年早些时候,一切都发生了变化。我的任务是跳到一个需要处理大型、复杂且相互关联的数据源的项目。这不仅仅是获取用户列表或更新单个记录,它需要灵活性、精确性和REST 难以提供的规模效率。

输入GraphQL。

起初,我持怀疑态度。为什么要修复没有损坏的东西?但随着我深入研究,GraphQL 不仅满足了项目的需求,它还重新定义了我对 API 的看法。凭借其能力:

  • 以客户端定义的灵活结构返回数据,
  • 通过单个 URL 端点进行操作,
  • 拒绝基于强类型架构的无效请求,以及
  • 预先确定的、相互理解的格式交付数据

GraphQL 很快就不仅仅是一个解决方案,它成为我 API 设计的新标准。

也就是说,本文的目的是不是为了支持 GraphQL 而抹黑 REST API。事实上,我相信两者可以完美地相辅相成。 REST 在我的项目中仍然发挥着至关重要的作用,特别是对于专用 REST 端点比 GraphQL 查询更实用的特定用例。

在这篇文章中,我将分享:

  1. 为什么我从 REST 切换到 GraphQL,
  2. 我亲身体验过的好处,以及
  3. 简单指南帮助您构建第一个 GraphQL 服务器。

无论您是对 GraphQL 感到好奇的初学者,还是希望过渡的经验丰富的工程师,本文都将向您展示为什么 GraphQL 值得您关注,以及它如何在不完全取代 REST 的情况下改变您的项目。

我从 REST 到 GraphQL 的旅程

多年来,REST API 一直是我的面包和黄油。我依靠它们来构建强大的系统、管理数据和提供功能。但随着我的项目变得越来越复杂,裂缝开始出现。
From REST to GraphQL: Why and How I Made the Switch

REST API 的挑战

一个反复出现的挫败感是过度获取和获取不足的数据。我要么获得太多我不需要的信息,要么必须提出多个请求才能获得我所做的一切。管理大量端点增加了复杂性,使更新和维护变得繁琐。

发现 GraphQL

今年早些时候,我加入了一个需要使用大型互连数据源的项目。REST 无法满足要求,团队建议使用 GraphQL。最初,我对此表示怀疑,但从单个端点准确查询所需内容的承诺引起了我的兴趣。

GraphQL 的第一印象

从 GraphQL 开始并非没有挑战。模式和解析器让人望而生畏,但它提供的灵活性和控制使这些努力变得值得。随着时间的推移,我意识到它如何无缝地解决了我在 REST 方面面临的痛点。

虽然我仍然在特定情况下使用 REST,但 GraphQL 已成为我处理复杂和动态数据需求的首选工具。

From REST to GraphQL: Why and How I Made the Switch

为什么我要改变

当我更深入地研究 GraphQL 时,一些关键优势脱颖而出,使转换变得轻而易举:

  • 灵活性:使用 GraphQL,我可以准确获取我需要的数据——不多也不少。不再需要处理多个端点或处理过度获取。
  • 效率:单个查询可以替代多个 REST API 调用,从而极大地提高性能。这对于具有复杂且相互关联的数据的应用程序尤其有影响。
  • 开发者体验:强类型模式、内省和更好的调试工具使开发更加顺利且不易出错。
  • 生态系统和社区支持: Apollo Client 和 GraphQL 等工具丰富了体验,使学习 GraphQL 并将其更轻松地集成到我的工作流程中。

我是如何做出转变的

这个旅程并非没有挑战,但将其分解为多个步骤使过渡变得易于管理:

第 1 步:了解 GraphQL 基础知识

我从学习核心概念开始:

  • 查询来获取数据。
  • 突变 修改数据。
  • 解析器 将模式定义连接到实际数据源。

这种基本理解是构建我的第一个 GraphQL 服务器的关键。

第 2 步:构建我的第一个 GraphQL 服务器

为了亲自实践,我使用 Node.js 和 Apollo Server 构建了一个简单的服务器。过程如下:

  1. 设置 Node.js 项目: 使用 npm init 初始化项目并添加必要的依赖项。
  2. 安装 GraphQL 依赖项: 安装了 apollo-server 和 graphql。
  3. 编写基本模式和解析器:定义一个模式来描述数据并编写解析器来获取数据。
  4. 运行服务器:启动服务器并使用 GraphQL 测试查询。

第一次看到它工作是不是很兴奋?这让我觉得付出的努力都是值得的。

第 3 步:转换现有 REST API

下一步是将 GraphQL 集成到现有的基于 REST 的项目中。我采取了渐进的方法:

  1. 确定了要替换为 GraphQL 查询或突变的关键 REST 端点。
  2. 构建了相应的 GraphQL 模式和解析器。
  3. 在过渡期间与 GraphQL 一起维护 REST 端点以确保稳定性。

这种混合方法使我能够在不破坏现有功能的情况下逐步推出 GraphQL。

快速入门指南:构建您的第一个 GraphQL 服务器

GraphQL 入门比看起来更简单。以下是使用 Node.js 和 Apollo Server 设置基本服务器的快速指南:

第 1 步:安装依赖项

首先初始化 Node.js 项目并安装必要的包:

npm init -y  
npm install apollo-server graphql  
登录后复制

第 2 步:定义架构和解析器

创建一个名为index.js的文件并添加以下代码:

const { ApolloServer, gql } = require('apollo-server');  

// Simulated user data  
const users = [  
  { id: '1', name: 'John Doe', email: 'john@example.com' },  
  { id: '2', name: 'Jane Smith', email: 'jane@example.com' },  
  { id: '3', name: 'Alice Johnson', email: 'alice@example.com' },  
];  

// Define schema  
const typeDefs = gql`  
  type User {  
    id: ID  
    name: String  
    email: String  
  }  

  type Query {  
    users: [User]  
    user(id: ID!): User  
  }  
`;  

// Define resolvers  
const resolvers = {  
  Query: {  
    users: () => users,  
    user: (_, { id }) => users.find((user) => user.id === id),  
  },  
};  

// Create server  
const server = new ApolloServer({ typeDefs, resolvers });  

// Start server  
server.listen().then(({ url }) => {  
  console.log(`? Server ready at ${url}`);  
});  
登录后复制

第 3 步:运行服务器并测试

启动服务器:

node index.js  
登录后复制

在浏览器或 GraphQL 等工具中打开提供的 URL 并测试查询:

查询所有用户:

query {  
  users {  
    id  
    name  
    email  
  }  
}  
登录后复制

通过ID查询单个用户:

query {  
  user(id: "1") {  
    name  
    email  
  }  
}  
登录后复制

From REST to GraphQL: Why and How I Made the Switch
恭喜??您刚刚构建了您的第一个 GraphQL 服务器!

经验教训

切换到 GraphQL 给了我宝贵的教训:

进展顺利

  • 这一转变显着提高了数据获取效率。不再有索取不足或过度索取的情况!
  • 强类型模式减少了运行时错误并使调试更容易。
  • 生态系统的工具(如 Apollo Client)提高了开发人员的工作效率。

我会采取什么不同的做法

  • 循序渐进地学习:我一头扎进去,这让人不知所措。采取分阶段的方法并首先关注查询和突变会更顺利。
  • 从小处开始:我首先用 GraphQL 替换单个 REST 端点,以了解工作流程。

给他人的建议

  • 不要完全放弃 REST:REST 和 GraphQL 可以共存。使用 REST 进行简单操作,使用 GraphQL 满足复杂、相互关联的数据需求。
  • 利用社区:GraphQL 拥有活跃的社区和优秀的资源。不要犹豫寻求帮助或学习他人的经验。

过渡到 GraphQL 不仅仅是改变工具,而是重新思考与数据交互的方式。从小事做起,不断尝试,享受这段旅程!

REST 与 GraphQL:快速比较

在 REST 和 GraphQL 之间做出决定时,了解关键差异可以帮助您为项目做出正确的选择。这是一个快速细分:

功能 REST API GraphQL 标题>
Feature REST API GraphQL
Data Fetching Fixed data structure for endpoints; can lead to over-fetching or under-fetching. Flexible queries; fetch exactly what you need.
Endpoint Management Multiple endpoints for different resources. Single endpoint for all queries and mutations.
Flexibility Limited flexibility; requires custom endpoints for specific data needs. Highly flexible; client defines data requirements.
Type Safety Relies on documentation; no built-in type enforcement. Strongly-typed schema ensures predictable data.
Error Handling Custom error formats; inconsistent across APIs. Standardized error responses from schema validation.
Tooling Varied and often endpoint-specific tools. Rich ecosystem with tools like Apollo, GraphQL, and Relay.
数据获取 端点的固定数据结构;可能会导致过度抓取或抓取不足。 灵活的查询;准确获取您需要的内容。 端点管理 不同资源的多个端点。 所有查询和突变的单一端点。 灵活性 灵活性有限;需要自定义端点来满足特定数据需求。 高度灵活;客户定义数据要求。 类型安全 依赖文档;没有内置类型强制。 强类型架构确保数据可预测。 错误处理 自定义错误格式;跨 API 不一致。 架构验证的标准化错误响应。 工具 各种且通常是特定于端点的工具。 拥有 Apollo、GraphQL 和 Relay 等工具的丰富生态系统。 表>

虽然 REST API 可靠且得到广泛支持,但 GraphQL 在需要复杂、相互关联的数据和灵活性的场景中表现出色。
更深入地研究我上一篇文章中的差异

结论

从 REST 过渡到 GraphQL 对我来说改变了游戏规则。灵活性、效率和改进的开发人员体验使我的项目更加健壮和可扩展。也就是说,我坚信 REST API 和 GraphQL 可以共存,在不同的用例中相互补充。

如果您正在考虑进行转换,我鼓励您从小事做起,进行实验,并逐渐将 GraphQL 集成到您的堆栈中。这是一段值得踏上的旅程,我很高兴看到你如何将它变成你自己的。

入门资源

这里有一些工具和指南可以帮助您深入了解 GraphQL:

  • GraphQL 文档
  • Apollo 服务器指南
  • GraphQL 游乐场

From REST to GraphQL: Why and How I Made the Switch

班蒂尔在吗?
您是否已从 REST 过渡到 GraphQL,或者您是否正在考虑进行切换?一路走来,您经历过哪些挑战或成功?请随时在下面的评论中分享您的想法、问题或经验。让我们一起成长、一起学习! ?

以上是从 REST 到 GraphQL:我为何以及如何进行切换的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板