GraphQL:PayPal结账的成功案例

栏目: 前端 · 发布时间: 5年前

内容简介:在PayPal,我们最近将这篇博文简要介绍了

在PayPal,我们最近将 GraphQL 引入了我们的技术堆栈。如果您还没有听说过 GraphQL ,它是REST API的一种广受欢迎的替代方案,目前正在风靡开发人员世界!

在PayPal,GraphQL对我们思考数据,获取数据和构建应用程序的方式进行了彻底的改变。

这篇博文简要介绍了 PayPal Checkout, 并解释了我们从REST到Batch REST到GraphQL的历程,以及沿途的经验教训。

PayPal的Checkout产品分布在许多网络和移动应用程序中,支持约200个国家/地区的数百万用户,并且可以随时运行数百个实验。这些应用程序利用相同的REST API套件来获取构建UI所需的数据。

大约4年前,我们就都在REST。我们的API很干净,小而且原子。一开始事情很棒。REST具有广泛理解的严格设计原则。REST是为领域设计和实现API的好方法。

但是,REST的原则并未考虑Web和移动应用及其用户的需求。在像Checkout这样的优化交易中尤其如此。用户希望尽快完成结账。如果您的应用程序正在使用原子REST API,那么您经常会从客户端到服务器进行多次往返以获取数据。通过Checkout,我们发现每次往返的网络时间(第99百分位数)至少需要700毫秒,不包括在服务器上处理请求的时间。每次往返都会导致渲染时间变慢,用户受挫更多,Checkout转换率也会降低。不用说,往返是邪恶的!

当然,您可以构建一个业务流程API来返回您需要的所有数据,但这需要权衡利弊。你叫什么名字?GET /login?现在这看起来像一个JSON API,而不是REST API。使用编排API,您的客户端将耦合到您的服务器。每次添加新功能或实验时,都会将其添加到API中。这有问题。

当新的需求出现时,开发人员面临一个选择:我们应该创建一个新的端点并让我们的客户再次请求该数据吗?或者我们应该用更多数据重载现有端点?

开发人员通常会选择第二个选项,因为它更容易添加另一个字段并阻止客户端到服务器的往返。随着时间的推移,这会导致您的API变得沉重,笨拙,并且不仅仅会承担一项责任。

开始时,我们的API返回了用户信息,送货地址和资金选项。构建Checkout应用程序所需的一切。随着时间的推移,用例堆积起来。即使他们不需要,每个用户也要支付这些字段的费用。

编排API(将很多字段功能塞入API称为编排)起初看起来很棒,但我们总是后悔。

Batch REST

REST不适用于我们,所以我们构建了一个Batch REST API来解决其中的一些问题。它是一个动态编排API,允许客户端确定响应的大小和形状。Batch允许我们组合原子REST请求并减少往返。

以下是批处理请求和响应的示例。该请求包含REST操作的映射,您可以在其中指定动词,端点,参数和它们之间的依赖关系。

{
"user": {
"method": "get",
"urt": "/apt/user"
},
"createCheckout": {
"method": "post",
"urt": "/api/checkout/EC-1234",
"params": {"total": "10.00", "currencyCode": "USD"}
},
"getCheckout": {
"method": "get",
"urt": "/apt/checkout/EC-1234",
"dependencies": ["createCheckout"]
}

使用Batch,我们喜欢客户端控制数据的大小和形状,而不是服务器。这使我们无需在每次客户端的要求发生变化时调整编排API。我们不喜欢客户必须非常了解底层API的工作原理。请求结构痛苦得足以让开发人员不使用它。我们还希望能够获取特定字段,而不是大型资源或对象。许多拥有批量产品的公司(如Facebook和Google)都存在同样的问题。它被视为一种优化但不是获取数据的正规的首要方法。

批处理REST是朝着正确方向迈出的一步,但不是游戏规则改变者。

GraphQL 去年,我们的经理( Brian Crescimanno )向我们提出了两个问题:

摘录

“2018年构建应用程序的最佳方法是什么?”

我们知道性能是一个问题。我们觉得我们没有像我们想要的那样富有成效。我们知道我们没有花足够的时间来构建出色的UI体验。

当我们仔细观察时,我们发现UI开发人员花费的时间不到实际构建UI的1/3。剩下的时间用于确定在何处以及如何获取数据,过滤/映射数据以及编排许多API调用。撒上一些构建/部署开销。

那时,我们开始越来越多地了解GraphQL。我们花了一周的时间仔细研究GraphQL并给我们留下了深刻的印象。幸运的是,我们推出了一款新产品,为想要将PayPal Checkout集成到他们的应用程序中的开发人员提供Mobile SDK。我们有6个星期发货,3个开发商用它来构建它。

“让我们使用GraphQL!” - 有人

随着团队构建UI,我们正在并行构建API。尽管API尚未准备好供他们使用,但我们 仍然 提前完成功能/代码,几乎不需要PayPal专业知识。开发人员不必发现要调用的内部API,如何调用它并将数据转换为可以使用的内容。他们检查了我们的模式以找出可能的内容,为他们需要的东西写了一个GraphQL查询(JSON,没有双引号),并继续在UI上进行迭代。

我们意识到我们正在做点什么。我们的开发人员很有效率,我们的应用程序很快,我们的用户很高兴  我们全力投入GraphQL。

我们有一些很大的开发人员经验和性能问题。GraphQL解决了这个问题以及更多问题。

性能  -   您只能获得所要求的数据。不多也不少。 单程往返。您也可以查询突变的一部分!

灵活性 -  客户确定数据的 大小形状 ,而不是服务器。

开发人员的生产力 -  立即 富有成效 ,没有部落知识。 如果你了解JSON,你就知道GraphQL。 令人难以置信的工具!

演进 - 使用GraphQL,API开发人员 确切地 知道客户正在使用哪些 字段, 并且在弃用或开发其API时能够做出更好的选择。使用REST,这是不可能的,因此您可以扩展并永不删除。

只是开始

Mobile SDK只是一个开始。我们现在在GraphQL和React之上重新推出我们的旗舰PayPal Checkout产品。如果你在美国,那么你很有可能使用我们的新产品。它 快得多。

PayPal也正在风暴使用GraphQL。一年后,我们有超过30个应用程序/团队构建API或使用API​​。这不是所有的阳光和彩虹。我们在一路上犯了一些值得分享的错误。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++程序设计

C++程序设计

谭浩强 / 清华大学出版社 / 2004-6-1 / 36.00元

《C++程序设计》作者深入调查了我国大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍内容,设计了读者易于学习的教材体系,并且以通俗易懂的语言化解了许多复杂的概念,大大减少了初学者学习C++的困难。C++是近年来国内外广泛使用的现代计算机语言,它既支持面向过程的程序设计,也支持基于对......一起来看看 《C++程序设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具