从REST到GraphQL:为什么以及我是如何完成转型的
2025/1/3 23:05:28
本文主要是介绍从REST到GraphQL:为什么以及我是如何完成转型的,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作为一名拥有4年以上经验的软件工程师,我从事过构建REST API的工作,一直都很欣赏REST带来的简洁性和可靠性。无论是设计接口还是结构化响应,REST一直是我的首选方案。
但今年年初,一切都变了。我被指派接手一个项目,该项目需要处理海量、复杂且相互关联的数据源。这不仅仅是获取用户列表或更新单条记录那么简单,而是需要在REST难以达到的规模上具备灵活性、精准度和效率。
让我们来看看 GraphQL。📌
最开始,我有点怀疑。为什么要修还没坏的东西呢?但当我深入了解后,GraphQL 不仅满足了项目需求,还改变了我对 API 的看法。通过其功能:
- 返回客户端定义的灵活结构的数据,
- 通过一个单一的URL端点来操作,
- 根据强类型模式拒绝无效请求,
- 以双方都认可的预定义格式提供数据,
GraphQL很快地不仅仅是一个解决方法——它成为了我设计API的新准则。
总而言之,这篇文章的目的不是为了推崇 GraphQL 而贬低 REST API。实际上,我认为两者可以很好搭配使用。REST 在我的项目中仍然扮演着重要角色,尤其是在某些特定情况下,使用专门的 REST 接口比 GraphQL 查询更为实际有效。
在这篇文章里,我要分享
- 为什么我从 REST 转向了 GraphQL,
- 我亲身感受到的好处,以及
- 一份简单的指南帮助你搭建第一个 GraphQL 服务器。
无论你是对 GraphQL 感兴趣的新手,还是希望转向 GraphQL 的有经验的工程师,本文都会向你展示为什么 GraphQL 是值得关注的,以及它如何在不完全替代 REST 的情况下改变你的项目。
从REST到GraphQL的我的旅程
多年来,REST API 一直是我的主要收入来源和工作重心。我依赖它们来构建强大的系统、管理数据并实现功能。但随着项目的不断复杂化,这些问题开始显现。
RESTful API的挑战
经常遇到的问题是过度获取和不足获取数据。有时我会获取到太多不需要的信息,有时又不得不多次请求才能获取所需。管理这些端点增加了工作量,使得更新和维护变得很繁琐。
探索一下 GraphQL
今年早些时候,我加入了一个需要处理大型且相互关联的数据集的项目。REST 已经不够用了,团队推荐使用 GraphQL。一开始我还有点怀疑,但能从一个端点精准查询所需数据的想法让我挺感兴趣。
关于GraphQL的第一印象
从开始使用 GraphQL 并非没有挑战。模式和解析器起初让我感到有些棘手,但它的灵活性和控制力让这一切努力变得值得。渐渐地,我渐渐意识到它无缝地解决了我在使用 REST 时遇到的问题。
虽然我仍然在特定情况下使用REST,但我更喜欢使用GraphQL来处理复杂和动态的数据需求。
我为什么选择转变
当我深入了解 GraphQL 时,几个关键优势变得明显,使得这一转变变得自然而然:
- 灵活度: 使用 GraphQL,我可以精确获取所需的数据——不多也不少。再也不用处理多个端点或过度获取数据的问题了。
- 效率: 单个查询可以替代多个 REST API 调用,提高了性能。这对涉及复杂且相互关联数据的应用程序特别有效。
- 开发者体验: 强类型的数据、内省特性和更好的调试工具使开发更加顺畅且减少了错误的发生。
- 生态系统和社区支持: 比如 Apollo Client 和其他 GraphQL 工具极大地丰富了体验,使学习和整合 GraphQL 更加容易。
我如何完成转型
旅程充满挑战,但这样分解成步骤让过渡变得容易处理。
第一步:了解GraphQL基础知识
我先从学习核心概念入手:
- 查询 用于获取数据。
- 修改 用于修改数据。
- 解析器(Resolvers) 用于连接模式定义与实际数据源。
对我搭建第一个 GraphQL 服务器非常重要的是这种基础知识。
第二步:搭建我的第一个GraphQL服务器
为了亲自动手,我用Node.js和Apollo Server搭建了一个简单的服务器。过程是这样的:
- 创建一个 Node.js 项目: 并初始化项目使用
npm init
,添加必要的依赖。 - 安装 GraphQL 依赖: 安装了 GraphQL 相关的
apollo-server
和graphql
。 - 编写基本的模式和解析器: 定义了描述数据的模式,并编写了用于获取数据的解析器。
- 运行服务器: 启动服务器并用 GraphQL 进行了查询测试。
第一次看到它运作真是太激动人心了🎉,这感觉一切都没白费。
第三步:将现有REST API过渡
下一步就是把GraphQL加到现有的REST项目中去,我采取了逐步推进的方式。
- 确定了需要替换为 GraphQL 查询或变异的关键 REST 接口。
- 构建了相应的 GraphQL 模式和解析器。
- 在过渡期间维护 REST 接口以确保稳定性。
这种混合方法让我能够逐步引入GraphQL,而不影响现有功能。
快速上手指南:搭建你的第一个 GraphQL 服务器
开始使用 GraphQL 比想象的要简单得多。下面是一份快速指南,使用 Node.js 和 Apollo Server 来搭建一个基本的服务器:
第一步:安装所需依赖
首先,创建一个Node.js项目,并安装所需的软件包:
npm init -y npm install apollo-server graphql <!-- 运行npm命令初始化项目并安装Apollo Server和GraphQL依赖包 -->
点击此处全屏模式 点击此处退出全屏
步骤二:定义模式及其解析器
创建一个名为 index.js
的文件,并在其中加入以下代码:
const { ApolloServer, gql } = require('apollo-server'); // 模拟的用户数据 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' }, ]; // 模式定义 const typeDefs = gql` type User { id: ID name: String email: String } type Query { users: [User] user(id: ID!): User } `; // 解析器定义 const resolvers = { Query: { users: () => users, user: (_, { id }) => users.find((user) => user.id === id), }, }; // 创建服务器 const server = new ApolloServer({ typeDefs, resolvers }); // 服务器启动 server.listen().then(({ url }) => { console.log(`🚀 服务器已启动并运行在 ${url}`); });
全屏查看。退出全屏。
第三步:运行服务器并进行测试
启动服务器:
node index.js # 运行主文件
全屏切换,进入全屏/退出全屏
在您的浏览器或如 GraphQL 之类的工具中打开提供的网址,并测试查询。
查看所有用户信息:
查询: { 用户 { id 名字 电子邮件 } }
进入全屏模式,或退出全屏模式
通过ID查询单个用户
{ query { user(id: "1") { 名字 电子邮件 } } }
全屏模式 退出全屏
庆祝🎉🎉 你刚刚创建了自己的第一个 GraphQL 服务器!
学到的
切换到 GraphQL 后,这让我学到了宝贵的知识和经验:
做得好的事情
- 这样的转换显著提高了数据获取的效率。数据获取不足或过量的问题再也不会出现了!
- 强类型的模式定义减少了运行时的错误,并使调试变得更加简单。
- 生态系统中的工具,例如 Apollo Client,提高了开发人员的效率。
我会怎样做得不一样
- 逐步学习: 我一次性投入整个项目,可能会感到压力山大。分阶段进行,先专注于查询和变异会更加顺畅。
- 从小开始: 我可以从替换一个 REST 端点做起,逐渐熟悉 GraphQL 的工作流程。
给别人的建议
- 别完全放弃REST: REST和GraphQL可以共存。用REST处理简单的操作,用GraphQL来处理复杂且相互关联的数据需求。
- 利用社区资源: GraphQL有一个活跃的社区和很多优秀的资源。有问题别犹豫向别人求助,也可以从别人的经验中学到很多。
迁移到 GraphQL 不仅仅是更换工具——更重要的是重新思考如何与数据打交道。从小开始,尝试实验,享受这段旅程!
REST 和 GraphQL:快速对比
在选择REST和GraphQL时,了解它们的关键区别可以为你在项目中的选择提供帮助。这里简单总结一下:
特性 | REST API | GraphQL |
---|---|---|
数据抓取 | 固定的数据结构,端点可能会造成过度获取或获取不足。 | 灵活查询,精准获取所需数据。 |
端点管理 | 不同资源对应多个端点。 | 所有查询和变异使用单个端点。 |
灵活性 | 灵活性有限,特定数据需求需要自定义端点。 | 高度灵活,客户端指定数据需求。 |
类型安全 | 依赖文档,无内置类型强制。 | 强类型模式确保数据的一致性和可预测性。 |
错误处理 | 自定义错误格式,跨API不统一。 | 从模式验证中提供标准化错误响应。 |
工具支持 | 工具多样,通常针对特定端点设计。 | 丰富的生态系统,如Apollo、GraphQL和Relay。 |
尽管REST API可靠且广泛支持,但在需要复杂、相关数据和灵活性的场景中,GraphQL更为出色。
详细了解差异,请参阅我之前的文章
结论
从 REST 转到 GraphQL 对我来说是改变游戏规则的。这种灵活性、效率以及改进的开发体验让我的项目变得更加强大和易于扩展。不过,我坚信 REST API 和 GraphQL 可以共存,相辅相成,适用于不同的情况。
如果你正考虑切换到 GraphQL,我鼓励你从小规模开始,边实验边逐步集成 GraphQL 到你的技术栈中。这是一段值得一试的旅程,我很期待看到你如何让它成为你自己的东西。
开始入门资源
以下是一些帮助你了解 GraphQL 的工具和指南:
- GraphQL 文档
- Apollo Server 使用指南
- GraphQL 实时编辑器
Bentil 在这里 🚀
你从 REST 过渡到 GraphQL 了吗,或者正在考虑转向 GraphQL?在整个过程中你遇到了哪些挑战或收获?欢迎在下面的评论区分享你的想法、问题或经历。让我们一起学习和成长吧!🚀
这篇关于从REST到GraphQL:为什么以及我是如何完成转型的的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04敏捷管理与看板工具:提升研发、设计、电商团队工作效率的利器
- 2025-01-04智慧养老管理工具如何重塑养老生态?
- 2025-01-04如何打造高绩效销售团队:工具与管理方法的结合
- 2025-01-04解决电商团队协作难题,在线文档工具助力高效沟通
- 2025-01-04春节超市管理工具:解锁高效运营与顾客满意度的双重密码
- 2025-01-046种主流销售预测模型:如何根据场景选用最佳方案
- 2025-01-04外贸服务透明化:增强客户信任与合作的最佳实践
- 2025-01-04重新定义电商团队协作:在线文档工具的战略作用
- 2025-01-04Easysearch Java SDK 2.0.x 使用指南(三)
- 2025-01-04百万架构师第八课:设计模式:设计模式容易混淆的几个对比|JavaGuide