首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PayPal大规模采用GraphQL的探索和实践

我们希望控制我们所有系统的身份,并提供一种安全的方式将 PayPal 子系统账户转换为 PayPal 账户。...我们为工具、前端和中端示例应用程序、异常处理技术和学习资源提供了支持。 我们构建了有助于支持 GraphQL 采用的工具: 我们建立了 GraphQL 标准,用于在内部定义 GraphQL API。...这些标准定义了命名约定、GraphQL 类型、请求头标准、指令标准和异常处理技术。 所有 GraphQL 操作都需要指定特殊指令,这些指令描述查询、突变和字段的所有授权要求。...范式转换:由于 GraphQL 要求采用设计优先的方法,我们在启用业务用例时考虑 GraphQL,并在考虑客户的情况下构建 API。 更快的交付速度:我们能够更快地交付功能。...使用 GraphQL,我们不必为每个平台编写多个 SDK。我们构建一次 API 就可以了。没有 GraphQL,我们不知道商户正在使用哪些字段以及调用了哪些端点。

3K20

GraphQL-Calculator 开源:基于指令和表达式实现查询的动态计算

例如过滤掉商品列表中在售状态为 false 的商品,将商品按照销量进行排序; 参数处理:对参数列表进行过滤,例如过滤掉 itemIdList 中为 0 的 itemId;对参数进行转换例如将 Redis...原生指令 @include 和 @skip 只支持 bool 类型的变量,但真实的业务场景判断规则更加复杂,往往存在逻辑计算。...作为 GraphQL 官方指定的能力拓展机制,GraphQL 生态的框架对指令有更好的支持,基于指令的能力拓展和框架本身也具有更好的兼容性。...如何使用指令 指令主要是对 GraphQL 语言元素的信息描述,例如使用 @include 指令描述是否请求某个字段: query userInfo($userId:Int, $needEmail...该指令集可使表达式对上下文数据进行加工转换,其默认表达式引擎为 aviatorscript。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

如何优雅地扩展GraphQL系统能力

在真实业务场景中,除了获取基础数据外,往往还会有一些对数据进行加工转换和编排控制的需求,例如对数值字段取精或者转换成展示文案、对列表字段进行排序过滤去重、根据条件判断是否请求查询中的某些字段、将一个字段的解析结果作为另外一个字段的入参等...原生的 GraphQL 查询为获取基础数据提供了便捷,但是计算能力不足导致其结果经常不能满足业务需求,数据往往需要加工转换、甚至经过多次编排查询,才能展示给用户。...GraphQL Calculator 参考了常见的编程概念对指令进行定义: 字段加工:通过表达式对结果字段进行加工转换; 数组处理:对结果中的数组字段进行过滤、排序、去重; 参数转换:对请求参数进行转换...GraphQL Calculator 指令的命名和语义参考了java.util.stream.Stream和 GraphQL 规范原生指令,易于理解和使用,例如@filter、@sort、@skipBy...此外,指令的合法使用往往有些前置条件,例如过滤指令不可用在简单对象或基本类型字段上。

1.2K20

Flyway 助力数据库脚本自动化管理攻略

Flyway 不仅可以支持 MySQL,它也可以支持非常多其他的数据库 ? 事实上,Spring Boot 已经完美整合了 Flyway。对此,我们可以非常便捷地使用它。...例如 1.1 比 1.0 版本高,1.1.1 比 1.1 版本高,而 1.1.01 和 1.1.1 版本一致。并且,它们会按照版本排序且顺序执行。 ?...此外,Flyway 不仅支持 DDL,也同时支持 DML(insert、update、delete)等。因此,我们可以再创建一个 V1.2_INSERTTAG_DATA.sql 文件来验证一下。...migration: Versioned migrations:数据库升级脚本 Repeatable migrations:可重复执行,当脚本 checksums 改变时会重新执行。...《人人都是 API 设计者:我对 RESTful API、GraphQL、RPC API 的思考》

1.2K10

渗透中遇到GraphQL怎么搞?

,则可能会泄露系统中所有的可用的查询,以及查询支持的字段等等,也就是说整个系统处于裸奔状态 如果系统中有一些敏感查询,则会泄露很多信息,甚至影响正常的业务逻辑 graphql支持的内省查询有两个__schema...可以看到查询到了我们之前注册的Book以及Author类型,但是想要进一步利用,只是知道系统中注册的所有类型还不行,我们需要知道系统支持哪些查询,用如下语句: ?...可以看到,我们之前注册的两个查询也出来了,但是还不够,咱们还得知道这些查询下支持哪些字段以及是否需要参数: ?...规避方案:目前还不了解graphql是否支持关闭内省机制,但是我们可以在业务上对内省机制进行限制,例如过滤查询中的__schema、__type关键词,这两个关键词都是小写,所以暂时也不需要担心大写绕过的问题...(但是业务上对大小写进行了不正确的转换就另说了) 自动绑定 自动绑定原理其实很简单,和spring中的自动绑定机制有点类似,就是如果我爆破出了你的敏感接口、以及对应的字段,我就可以直接使用,这本就是graphql

3.2K41

GraphQL 名词 101:解析 GraphQL 的查询语法》【译】

GraphQL查询必须包含一个标识选择集的字段,且该字段返回的是对象类型,选择集不能设置在返回值是标量类型(Scalar Types)的字段上,例如Int或者String。...例如没有片段时需要这样编写 query: query noFragments { user(id: 4) { friends(first: 10) { id name...指令(Directives)指令是独立于GraphQL server之外的一个附加功能。指令不会对结果的值产生影响,但是会影响哪些结果会被返回,也许还会影响这些结果是如何被执行的。...指令可以出现在查询的任何地方,但在这篇文章中我们只关注当前GrahpQL文档所描述的skip(忽略)和include(包括) 两个指令。...`skip` 指令表示在 if 参数为 true 时忽略片段中的字段。由于指令的语法相当灵活,我们可以利用它来给GraphQL添加更多的特性,而不是使用语法解析或者引入更复杂的工具的方式。

2.8K20

prisma后端框架基本使用

prisma generate schema概念:**也是定义各种数据模型,有三个东西Query,Mutation,Subscribtion,决定resolver有哪些 datamodel概念:定义底层数据库模式和表...resolvers概念:定义前端接口 datamodel.prisma Types由多个fields字段组成,通常表示应用程序中的实体(例如User,Car,Order)。...Directives指令涵盖不同的用例,例如类型约束或级联删除行为。 Interfaces是抽象类型,包括一组字段,类型必须包含在implement接口中。...接口目前不适用于Prisma中的数据建模,但将来会支持待实现功能。...@unique指令表示唯一约束,这意味着Prisma会自动确保永远不会有两条数据具有相同的值,比如说id或手机号不会相同从而造成重复注册。

1.6K10

怎样使用 apollo-link-state 管理本地数据

那么剩下的 20% 的本地数据(例如全局标志、设备 API 返回的结果等)应该怎样处理呢? 过去,Apollo 的用户通常会使用一个单独的 Redux/Mobx store 来管理这部分本地的数据。...GraphQL 最大的一个优势在于,当给 GraphQL 语句中的字段加上合适的 GraphQL 指令后,单条 query 就可以从多个数据源中获取数据,无论本地还是远端。让我们来看看具体的方法。...有时候我们需要写入的数据依赖于 Apollo cache 中原有的数据,例如上面的 addTodo 方法。在这种情况下,可以在写入之前先用 cache.readQuery 查询一遍数据。...以上这段代码通过 @client 指令将数据修改限制在本地。 GraphQL 的一个很让人激动的功能是在单个 query 中向多个数据源请求数据。...为了避免这点,我们希望能将数据模式的构建转移到项目的构建阶段,从而达到对类型校验的支持,并也可以用到 GraphiQL 中的各种很酷的功能。

2.3K100

DTO 的替代品!!

具体到 JSON,我们可以将提供正确数据的过程委托给序列化框架,例如 Jackson。...4 GraphQL 最后但并非最不重要的一点是,可以返回完整的实体并让客户端决定哪些数据在其上下文中有意义。 GraphQL就是围绕这个想法构建的:Facebook 创建了它,现在它是完全开源的。...API 的查询语言 GraphQL 是一种 API 查询语言,也是一种使用现有数据完成这些查询的运行时。...GraphQL 为您的 API 中的数据提供了完整且易于理解的描述,使客户能够准确地询问他们需要什么,仅此而已,使 API 更容易随着时间的推移而发展,并支持强大的开发人员工具。...5 结论 当业务模型和演示模型之间存在差距时,很容易回到古老的“模式”,例如 DTO。但是,上述任何替代方案都可能更相关。

1K30

GraphQL到底怎么使?看看智联前端团队技术沉淀

但是在 Directives(指令)的支持和使用上,规范和实现是有冲突的。...自定义指令支持:在我查到的资料中,Facebook 与 graphql-js(Facebook提供实现)官方有不支持自定义指令的表态1(https://github.com/graphql/graphql-js...在 Apollo 实现的 Graphql 生态中则是支持自定义 Schema 端可用的指令,对 Document 端的自定义指令实现暂不支持且不建议支持。...所以也会从 GraphQL 的开发者和两者间的角度谈谈成本和收益。 BFF:GraphQL 可以完成数据聚合、字段转换这种符合 BFF 特征的功能,提供了一种 BFF 的实现选择。...没有 BFF 层时,由于 GraphQL 对于实现数据聚合、字段转换提供了范式,可以考虑使用 GraphQL 服务作为 BFF 层,或者结合1、2点,将部分接口实现为 GraphQL,作为 BFF 层的一部分

2.2K20

涂鸦智能选型 TiKV 的心路历程

涂鸦之所以有这么大量的数据,是因为目前人们家里应该都会使用到智能设备,例如智能电灯、扫地机器人,设备联网后就与涂鸦平台有了通讯的能力,而智能设备的各种定时触发,比如家里的摄像头巡更、扫地机器人的位置信息都需要上报给涂鸦的...AWS Aurora 涂鸦在早期使用的是 AWS Aurora。...经过测试验证,发现现有的 TiKV 版本不支持 SSE 指令集,也就是说目前 TiKV 4.0 使用的 RocksDB 版本是不支持 SSE 指令集的。...到了今年,TiKV 推出了 5.0 版本,TiKV 5.0 是支持了 aarch 64  优化过的 CRC32C 指令集,也就是 SSE 4.2 指令集,但前提条件是 RocksDB 版本要大于 6.1.2...,而 TiKV 5.0 版本的 RocksDB 的版本是 6.4.6,并且在 TiKV 上面可以找到 TiKV 针对 SSE 指令集的优化,也就是说 TiKV 5.0 现在已经完全支持 SSE 指令集了

75210

安全地将 Netflix 迁移到 GraphQL

我们不希望传统的 Falcor API 永远存在,因此我们采用了 Federated GraphQL支持一个具有多个 GraphQL 服务器的单一 GraphQL API。...Replay 测试框架利用 GraphQL 联合中提供的 @override 指令。该指令告诉 GraphQL 网关将请求路由到一个 GraphQL 服务器而不是另一个。...例如,以下是 Shim 服务和 Video 服务定义的两个 GraphQL 模式: 在第一阶段,GraphQL Shim 首先定义了 certificationRating 字段(例如 Rated R...具有 @override 指令的相同字段的存在告知 GraphQL 网关将此字段的解析路由到新的 Video Service,而不是旧的 Shim Service。...工具:Sticky Canary 虽然 Replay 测试验证了新的 GraphQL API 的功能正确性,但它并不提供性能或业务指标的洞察,例如用户交互的整体感知健康状况。用户的点击率是否相同?

12730

Spring认证_什么是Spring GraphQL

Spring GraphQL 为构建在GraphQL Java上的 Spring 应用程序提供支持。这是两个团队之间的联合协作。我们的共同理念是少固执己见,更专注于全面和广泛​​的支持。...网络传输 Spring GraphQL 支持通过 HTTP 和 WebSocket 的 GraphQL 请求。...使用它来拦截请求、检查 HTTP 请求标头或注册以下内容的转换graphql.ExecutionInput: class MyInterceptor implements WebInterceptor...查询执行 GraphQlService是调用 GraphQL Java 来执行请求的主要 Spring GraphQL 抽象。底层传输,例如Web 传输,委托GraphQlService来处理请求。...上下文传播 Spring GraphQL 支持从Web 传输、通过 GraphQL 引擎以及DataFetcher它调用的其他组件透明地传播上下文。

2.9K20

GraphQL语法用于模式验证和代码生成的新方法

GraphQl学习文档 Nav Inc.已经创建了一个开源模式定义和代码生成器,它使用GraphQL语法来定义事件和消息格式。...输出可以是其他模式语言,比如protobuf或JSON schema,也可以是当前支持Go、Ruby和Python的代码。 公共数据模型的好处在于能够轻松地在多个团队和服务之间传播其实现。...这个类型系统支持标量、对象、枚举以及这些类型值的基本验证。我们使用这个类型系统来定义有效载荷和自定义验证规则(例如数据格式、允许值范围、正则表达式匹配和必需属性)。...定义消息契约时,可以根据有效负载类型选择在消息契约中包含哪些字段。 另一个原因是,GraphQL语法是人类可读的,与JSON Schema相比,使用起来更简单。这促进了团队之间的沟通。...因此,除了代码生成之外,NSA还被用于将GraphQL转换为JSON/Protobuf模式。 InfoQ:你的系统架构主要使用异步消息传递还是请求-响应?NSA适用于这两种方法吗?

17210

「web应用架构」有原则GraphQL

像一个源代码控制系统,注册表的模式存储修改图,谁让他们的历史,它应该理解图像的多个版本的概念(例如,登台和生产,或不同的开发分支)的方式相似的软件开发过程。...通过将实现细节排除在模式之外,应该可以重构实现图的服务——例如,从一个整体转换到微服务,或者改变服务实现的语言——而不影响该领域的应用程序。同样,模式不应该与特定应用程序获取数据的方式紧密耦合。...可以捕获关于在图上执行的每个操作(读或写)的大量信息:哪些用户和应用程序执行了该操作、访问了哪些字段、实际执行操作的方式、如何执行操作,等等。这些资料非常宝贵,应当有系统地加以收集,供以后使用。...跟踪应该召集所有相关信息关于一个操作在一个地方,包括业务信息(谁做了手术,访问或改变,哪些功能的应用程序由哪些开发人员,是否成功,如何执行)和纯技术信息(后端服务联系,每个服务如何导致延迟,是否使用缓存...然后,这个流可以通过管道进入其他可观察性系统(可能在对不支持graphql的现有系统进行简单转换之后),或者存储在一个或多个数据仓库中供以后使用(根据预算、用例和规模的需要进行汇总和取样)。 10.

72110

Spring Boot - Rest VS GraphQL

数据传输:客户端通常不能选择要获取的数据,而是由服务器决定哪些数据返回给客户端。这可能导致过度或不足的数据传输。 版本控制:通常需要考虑API版本控制,以确保向后兼容性。...强类型:GraphQL具有强类型系统,定义了可用的数据类型和查询结构,这有助于提前检测错误。 实时数据:GraphQL支持实时数据查询,允许客户端订阅数据的更改。...图解 ---- Code Spring Boot + Rest 在Spring Boot中整合REST,您可以使用Spring Web模块,它提供了用于构建RESTful Web服务的支持。...Spring Boot + GraphQL 在Spring Boot中整合GraphQL,您可以使用第三方库(例如graphql-java和spring-graphql)。...> 11.1.0 runtime 创建GraphQL模式和查询,例如: # src/main

19830

GraphQL 基础实践

例如在 Android 或 iOS 客户端上,发版升级了一个很爆炸的功能,同一个API上可能为了支持这个功能而多吐一些数据。但是对于未升级的客户端来说,这些新数据是没有意义的,也造成了一定的资源浪费。...前面还提到 GraphQL 是一套标准,怎么用呢,我们可以借助一些库去解析。例如 Facebook 官方的 GraphQL.js。...以及 Meteor 团队开发的 Apollo,同时开发了客户端和服务端,同时也支持流行的 Vue 和 React 框架。...内置指令 GraphQL 中内置了两款逻辑指令指令跟在字段名后使用。...将它安装到我们的项目中:npm install graphql-tools --save 编写 Schema 和 Resolver 在转换成 GraphQLSchema 之前,首先要将我们的 Schema

12.8K20
领券