写点什么

Apollo 项目:成为新技术早期使用者的弊端

  • 2019-09-03
  • 本文字数:1806 字

    阅读完需:约 6 分钟

Apollo项目:成为新技术早期使用者的弊端

本文是 CodePen 的技术人员 Cassidy 在学习使用 Apollo 过程中总结的学习经验和心得体会。Cassidy 鼓励开发者学习新的技术,成为早期使用者并为该技术的社区建立与发展做出贡献。



当人类决定尝试登陆月球时,需要从头开始为该项目发展大量的先进技术。这是一项艰苦、昂贵、且耗时的工作,并且会走很多弯路。这就是成为新技术的早期使用者的弊端。如果你正在探索一门新技术,当遇到技术难题时,周围很大可能没有经验丰富的专家可以回答你的问题。


多年来,我一直在 CodePen 工作,最近我们决定切换React代码顶层的堆栈,以使用 Apollo 和 GraphQL,在这个过程中我积累了一些非常棒的学习经验。我个人很喜欢使用 Apollo,它能够以非常模块化的方式管理组件,这与使用 Redux 管理组件的方式不同。


但是,因为Apollo是一种相对较新的技术,所以当团队采用它并随着它的发展而学习时,肯定会有一些优点和缺点。当我第一次查找 Apollo 相关问题的答案时,基本没有多少回答。当决定学习一些相对年轻的技术时,即使是简单的问题,也很难找到相关支持。因此,你只能自己去寻找问题的突破口,可以把这当成是一次难得的学习机会。这也意味着你可以投身到建立与塑造一个新技术的社区的过程中,同时,当其他人开始看到你提供的解决方案时,你会获得相应的回报。


Apollo 是一个单一查询系统,可以帮助你在大规模项目中运行GraphQL。它为你建立了一个数据图表,让所有的微服务和客户端以完全相同的方式相互通信。为了更好地理解,让我们来看一个例子。


对于 CodePen 的前端,我们希望给定的组件中获得有关当前登录用户的数据。以前,如果我们想要这些信息,我们必须设置某种中间件来处理调用,或者在某处调用一些 Action,或者在 componentDidMount 中粘贴一个 API 进行调用,然后确保对我们需要的所有不同数据元素进行单独调用。至少,我们需要与后端团队交谈,以确保我们能够以想要的格式获取数据。使用 Apollo,我们可以在组件顶层填充一个小块,它将返回当前登录用户的 ID,以及他们是否是 CodePen Pro 用户。代码如下所示:


const SESSION_USER = gql`  query CreateSessionUser {    sessionUser {      id      pro    }  }`;
复制代码


现在,假设我们需要更多的数据,例如还需要获取他们的头像和用户名。我可以只修改我的查询代码,而不是进行另一次查询,或联系后端团队以将这些信息添加到 API 端点。修改后的查询代码如下所示:


const SESSION_USER = gql`  query CreateSessionUser {    sessionUser {      id      pro      avatar      username    }  }`;
复制代码


获取到我想要的数据就是这么简单,这就是拥有单一数据图的好处。如果数据被包含在图表中,那么你就可以直接查询它,并且前端有足够的权限根据你的需求获取和使用该数据。这种新技术的出现是非常新鲜和令人兴奋的,至少在我们遇到难以解决的问题前是这个样子。


我在使用 Apollo 的过程中遇到的很多问题之一就是它的报错功能尚未成熟。Apollo 系统返回的报错信息大都太过宽泛,所以如果你不熟悉整个 Apollo 的框架就很难调试对代码进行调试工作。有一次我在 Stack Overflow 上寻找答案,试图弄清楚组件出了什么问题,令我震惊的是没有什么答案,甚至关于 Apollo 的话题都没有多少。通常,当我在 Stack Overflow 上询问某些内容时,我可以在一小时左右获得大量答案。但是这次,我等了几个星期仍然没有收到回应。


因为没有找到有效的答案,所以我不得不深入了解并熟悉那些让 Apollo 能够工作的代码。我的 Apollo 问题得到了一些评论,但实际上在一个月的时间里并没有得到多少有效答案,最终是我自己回答了这个问题。根据遇到问题的人数来判断框架是新的还是受欢迎的,这不是很有趣吗?Vue.js 目前在 Stack Overflow 上有大约 38.5k 的问题, React 有超过 150k 的。截至这篇文章撰写的时候,Apollo 仅有 5000 个,约三分之一来自过去 6 个月!


很高兴看到 Apollo 在开发者社区种越来越收到关注了。通过统计 Stack Overflow 的问题,GitHub 的相关 Issue,甚至是 Twitter 主题,你可以看到人们越来越乐于分享他们遇到的问题以及学到的新知识。


我想对开发人员说:当开始使用全新的技术时,可以尝试提出问题,撰写博客文章,在社交媒体上分享,并对发现持开放态度,因为你永远不知道可以帮助谁,分享的越多,其他人就越容易找到你并回报你的付出。


原文链接:


https://stackoverflow.blog/2019/08/28/apollo-graphql-codepen-data-microservices-early-adopter/


2019-09-03 09:217161

评论

发布
暂无评论
发现更多内容

NFTScan 推出「NFTScan Connect」计划,支持早期 Web3 初创团队

NFT Research

#Web3

窃取个人数据?OpenAI遭集体诉讼!"拯救数智化时代!低代码开发平台:打造信息安全的无敌守护者

不在线第一只蜗牛

低代码 信息安全 ChatGPT 数智时代

全面揭秘!火山引擎边缘 IaaS 混合部署架构实践

火山引擎边缘云

IaaS 实践 火山引擎边缘云

喜报频传|海泰方圆红莲花安全浏览器喜获国密认证二级证书!

电子信息发烧客

虚拟现实(VR)在医疗保健中的5种应用

3DCAT实时渲染

虚拟仿真

Meta 提出用向量检索来改进图像描述模型

Zilliz

非结构化数据 深度神经网络 meta

MySQL:无锁可扩展的 WAL 设计

互联网工科生

MySQL

程序员们集体诟病,低代码真的如此不堪?

伤感汤姆布利柏

Milvus JSON 实用手册大放送:更简便、更灵活、更贴心

Zilliz

json Milvus 向量数据库 zillizcloud

当大模型遇到数据仓库 HashData助力LLM规模化应用

酷克数据HashData

RocketMQ 主从复制机制,看这篇就够了

勇哥java实战分享

IM即时通讯APP在聊天场景中的应用

BeeWorks

探索智慧未来:JNPF低代码开发平台引领产业智能化革命!

加入高科技仿生人

低代码 智慧工厂 现代产业

走出舒适区吧,程序员们!

伤感汤姆布利柏

祝贺!Databend Cloud 和腾讯云达成合作

Databend

新华三眼中的AI天路

脑极体

AI

Flutter 与渐变色相关的那些有趣实用的例子

编程的平行世界

flutter android

特别呈现|腾讯云 X K+ 峰会共同打造软件工程新生态

CODING DevOps

一文了解PoseiSwap的质押系统

西柚子

TDengine 发布 IoT 场景下 3.0 性能对比分析报告,全方位超越 InfluxDB & TimescaleDB

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

统一移动门户对政企级办公来说有哪些优势?

BeeWorks

一探究竟!天翼云2023MWC展区“亮”了!

天翼云开发者社区

人工智能 大数据 数字化

云存储环境下的容灾关键技术

天翼云开发者社区

云计算 云存储

重识Flutter — 探索Slivers的奇妙世界(综合实例)

编程的平行世界

flutter android

一文了解PoseiSwap的质押系统

BlockChain先知

Apollo项目:成为新技术早期使用者的弊端_文化 & 方法_Cassidy Williams_InfoQ精选文章