写点什么

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:217328

评论

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

KeeWiDB:兼容Redis协议,领跑NoSQL

腾讯云数据库

数据库 nosql 腾讯云 腾讯云数据库 KeeWiDB

浅析python爬虫(上)

吉师职业混子

9月月更

OceanBase荣获OSCAR两项大奖,开源已成主流开发模式

OceanBase 数据库

【微信小程序】小程序的条件渲染

陈橘又青

9月月更

监控系统工作原理

穿过生命散发芬芳

监控系统 9月月更

Javaweb核心之servlet详解

楠羽

Servlet 笔记 9月月更

linux入门学第一天

乌龟哥哥

9月月更

史上最全的Java容器集合之入门

自然

java; 9月月更

关联分析:实现全景化应用监控的基础

阿泽🧸

智能运维 9月月更

史上最全的Java基础(针对面试)

自然

java; 9月月更

设计模式总结(一):创建型模型

Studying_swz

设计模式 9月月更 创建型模型

2022-09-21:有n个动物重量分别是a1、a2、a3.....an, 这群动物一起玩叠罗汉游戏, 规定从左往右选择动物,每只动物左边动物的总重量不能超过自己的重量 返回最多能选多少个动物,求一个

福大大架构师每日一题

算法 rust 福大大

【微信小程序】你了解小程序开发吗?

陈橘又青

9月月更

Java进阶(三十三)java基础-filter

No Silver Bullet

Java filter 9月月更

分布式数据库技术之路未来如何发展?

OceanBase 数据库

小六六读Effective记录

自然

java; 9月月更

【内存操作函数内功修炼】memcpy + memmove + memcmp + memset(四)

Albert Edison

C语言 9月月更 strcpy strncpy

可恶,又是个线上问题

艾小仙

Java ShardingSphere TiDB

【网络安全】记一次杀猪盘渗透实战

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

赴一场深圳的线下沙龙|分布式数据库助力跨境企业降本增效

OceanBase 数据库

“为场景找技术”:全球数字化转型的大同之道

脑极体

跟着卷卷龙一起学Camera--Gamma

卷卷龙

ISP 9月月更

创作者能从设计师那学到什么样的设计原则

宇宙之一粟

读书笔记 设计 读书感悟 设计原则 9月月更

传媒产业的数字化怎样被小程序影响

Geek_99967b

小程序

OpenTelemetry Go Metric SDK (Alpha) v0.32.0 发布

Grafana 爱好者

OpenTelemetry

C++学习---__libc_open函数的原理

桑榆

c++ 源码阅读 9月月更

Selenium简单基础详解(I)

吉师职业混子

9月月更

XML简单基础详解(I)

吉师职业混子

9月月更

人脸关键点的应用场景及重难点解析丨Dev for Dev 专栏

声网

算法 Dev for Dev 人工智能’

一文读懂Jina生态的Dataclass

Jina AI

多模态机器学习 多模态 跨模态

峰会倒计时3天!硅谷传奇投资人登陆专场,围炉共话分析型数据库的爆发式增长

StarRocks

数据库

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