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

解决 GraphQL 的限流难题

Shopify 今年 6 月份发了一篇《Rate Limiting GraphQL APIs by Calculating Query Complexity》[3]的文章,讲了他们在使用 GraphQL...Shopify 的方案在执行 GraphQL 请求前会先对这个 GraphQL 请求做静态分析,来计算该请求的成本,成本以“点数”来表示。 这篇文章主要就是介绍它们这套计算方法。...Connections: 两点 + 返回的对象数量 GraphQL 的 Connection 表示的是一对多的关系。...Query Cost 详情 上面举的例子是直接返回一个计算出的总值,还可以得到按字段细分的查询消耗,在请求中加一个 X-GraphQL-Cost-Include-Fields: true 的 header...就可以让 extention object 展示更详细的点数信息了: { "data": { "shop": { "id": "gid://shopify/Shop/91615055400

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

REST API有关幂等性等11条最佳实践

Shopify在这里感到羞耻。 URL 是资源标识符,而不是表示形式。将表示信息添加到 URL 意味着“事物”没有规范的 URL。客户端可能无法通过 URL 唯一地识别“事物”。...Stripe 的标识符有两个字母加下划线的前缀:in_1MVpWEJVZPfyS2HyRgVDkwiZ Shopifygraphql 标识符看起来像 URL(尽管它们的 REST API ID 是数字...,嘘):gid://shopify/FulfillmentOrder/1469358604360 使用什么格式并不重要,只要 1) 它们在视觉上不同并且 2) 它们不会改变。...有很多层软件会对请求返回 404,其中有些可能是你无法控制的: 配置错误的客户端点击了错误的 URL 配置错误的代理(客户端和服务器端) 负载平衡器配置错误 服务器应用程序中的路由表配置错误 返回...就像第一个 POST 返回且没有错误一样。 2、返回之前的响应 不要向客户端返回错误,而是向他们返回客户端应该第一次得到的确切响应。 这使得客户端变得更加愚蠢,因为他们不必显式地编写冲突错误处理程序。

18020

Remix 究竟比 Next.js 强在哪儿?

在成功加载出图片之前应用得先获取到数据,而数据获取又要先完成 JavaScript 的加载、解析和评估。 客户侧获取数据意味着要传递更多的 JavaScript 文件,更长的时间来解析和评估。...有时候你可能都忘了还有解析和评估这回事,但仔细看这个瀑布图其中的第 15 条请求,其所花费的时间甚至比整个文件下载的时间还要长!...----------------------------- TypeScript 88 616 2256 5328 GraphQL...但这些 API 可以让 Remix 更快地完成页面加载、转换,并为突变相关的中断、争用条件和错误带来更好的用户体验,让开发者的代码负担减轻。...我们需要结合 getServerSideProps、API 路由,以及浏览器的代码中与这二者相沟通的部分才能解决包含错误处理、中断、争用条件、重定向和重新验证等突变相关的问题。

3.3K60

REST API和GraphQL API的比较

GraphQL 已被 Twitter、Expedia、Shopify 等知名组织广泛采用,主要由 GraphQL 基金会维护和开发。...同样,将数据提供给客户端的方式是 GraphQL 和 REST 分歧最大的地方。在 REST 设计中,客户端提交 HTTP 请求,数据作为 HTTP 响应返回。...为了避免数据获取不足和过度获取,灵活的样式定义了信息请求的结构,并从服务器返回相同的结构。 与 GraphQL 相比,REST API 具有严格的数据结构,可能首先返回不相关的信息(过度获取)。...错误处理 每个 GraphQL 请求、成功或错误都会返回 200 状态代码。与 REST API 相比,这是一个明显的区别,在 REST API 中,每个 状态代码都指向某种类型的响应。...GraphQL 中的任何合法答案都应该是 200,包括数据和错误响应。客户端工具将有助于更有效地管理错误错误作为特定错误对象下的响应主体的一部分进行处理

38710

为什么我使用 GraphQL 而放弃 REST API?

没有静态类型意味着要注意类型验证 无论如何努力避免这种情况,你迟早会遇到 JSON 属性拼写错误、发送或接收的数据类型错误、字段丢失等问题。...如果你的客户端和 / 或服务器编程语言是静态类型的,并且你不能用错误的字段名或类型构造对象,那可能没问题。...客户端库根据模式自动解析和验证查询,然后将其发送到 GraphQL 服务器。...在 Facebook 设计 GraphQL 的同时,我们也看到越来越多的大公司在他们的产品中使用它:GitHub、Shopify、Khan Academy、Coursera,而且 这个列表还在不断增长。...如果你使用的是 WordPress,也有 GraphQL API 可以使用。Reaction Commerce 是 Shopify 的开源替代方案,同样是基于 GraphQL

2.3K30

一种不错的 BFF Microservice GraphQLREST API 层的开发方式

errors * GraphQL 错误处理程序 | | ├───schema * GraphQL Schema 类型 | | ├───...Mocks 作为 TDD 的一部分,我们可能需要模拟 graphql 响应,直到我们能够实现解析器为止 该基础结构设置为仅为当前未实现的解析器添加模拟。...如果启用了 JWT 安全性(环境变量 JWT_AUTH 为 true),我们需要使用登录突变 API 来获取示例 JWT 令牌(当前设置为1小时到期) Step 1 - 使用登录 mutation(突变...它将给出一个错误(注意:错误处理需要改进,但是这里我们只看这个概念) Step 3 - 在执行 “examples” 查询之前,使用 Bearer token 设置授权头。...此处的区别在于,我们使用 @auth 指令根据角色来处理身份验证,而不是对解析程序中的实现进行硬编码。这是更清蒸的方法,并且与解析器分离。

2.3K10

从Ruby到Node:重写Shopify CLI,提升开发体验

Hydrogen 开发人员希望 npm install 命令能够解析他们在项目中需要的所有依赖项。...下面的示例展示了一个惯用的 API,特性开发人员可以使用该 API 获取一个有效的会话,与 GraphQL API 进行交互。...只有少数情况下,为了符合语言要求,我们才诉诸于类,如错误类型。...它们的职责仅限于解析和验证参数及标志,并提供帮助菜单的内容。 服务(Controller):是业务逻辑的封装单元。所有命令都有一个包含命令业务逻辑的服务,有些服务没有绑定到特定的命令。...一个例子是与 Shopify GraphQL API 交互的所有函数。 5. 实现端到端测试策略 采用函数式编程和最小化副作用简化了单元测试的编写。

31220

技术专题:API资产识别大揭秘(一)

正确返回{ "data": { ... }}# 执行时发生错误{ "errors": [ ... ]}使用场景:比较复杂的数据查询和获取、需要从多个平台进行数据查询并集成、前后端分离模式下,需灵活开发...,过于理想的 RESTful API 可能在实际情况中会付出太多的成本,这样会导致很多企业并不会完全按照其规范进行,所以RESTful API在流量中可能并不会存在很明显提取特征来计算出它的API唯一标识符...统一返回数据格式:常用的返回数据格式有 JSON 和 XML。请求和响应的数据格式统一。...正因如此,GraphQL API相比于RESTful API,GraphQL 只用一个数据源就可以查询所有数据,所有的请求都可以访问一个服务端点;并且GraphQL 返回的结果响应准确地根据客户端的请求字段...,也就是说,GraphQL API存在一个类似于JSON的特殊格式,且请求中的参数和返回结果一一对应。

58920

来试试Graphql

GraphQL 可精准的返回所需的数据结果,减少数据传输大小。 嵌套复杂数据仅需一次调用 RESTful 对于嵌套的复杂数据需要多次调用,而 GraphQL 只需要一次。...如果只是 1 个,2 个场景还好,但如果后期有 n 个场景,需要返回非常多的字段,这不仅会浪费带宽,客户端数据解析也会影响响应时间,从而影响用户体验。那让后台新增一个接口可以吗?...基本类型 Int, Float, String, Boolean, ID(唯一标识符) 其他类型 enum, Date, interface !...resolver 的解析规则是, 从外到内依次处理查询块,为每一个查询块执行对应的 resolver 函数,并传递外层调用返回的结果作为第一个参数,也就是下面代码中的 obj 。...resolver 函数它接收 4 个参数 fieldName(obj, args, context, info) { result } // obj:解析程序在父字段上返回的结果的对象 // args

1.9K20

GraphQL 在微服务架构中的实践

name: String } Faction 和 Ship 两个类型都拥有唯一标识符 id 字段,我们可以通过该标识符重新从服务端取回对应的对象,Node 接口和字段在默认情况下会假定整个服务中的所有资源的...进行路由的,GraphQL 其实帮助我们完成了解析查询树的过程,我们只需要对相应字段实现特定的 Resolver 处理返回的逻辑就可以了。...Solving the N+1 Problem for GraphQL through Batching – Shopify Engineering How Facebook organizes their...进行路由的,GraphQL 其实帮助我们完成了解析查询树的过程,我们只需要对相应字段实现特定的 Resolver 处理返回的逻辑就可以了。...Solving the N+1 Problem for GraphQL through Batching – Shopify Engineering How Facebook organizes their

2.6K20

安息吧 REST API,GraphQL 长存

使用 GraphQL 的客户端程序可以通过其功能查询该模式。这种方法使得客户端与服务端解耦,并允许其两者独立开发和扩展。 GraphQL 请求可以是查询(读取操作)或突变(写入操作)。...客户端无法控制服务器返回的数据。没有任何语言可以这样做。更确切地说,可用于客户端的语言非常有限。...我们也可以设置超时时间来终结需要过长时间解析的请求。此外,由于 GraphQL 只是一个解析层,我们可以在 GraphQL 下的更底层处理速率限制。...客户端可以要求服务器只执行使用查询唯一标识符预先批准的查询。据说 Facebook 采用的就是这种方法。 认证和授权是在使用 GraphQL 时需要考虑的其他问题。...GraphQL 查询字段被设计为独立的功能,并且使用数据库中的数据解析这些字段可能会导致对已解析字段产生新的数据库请求。

2.7K30

GraphQL最突出的架构优势是什么?

GraphQL API 的配置工作包括: 安装 GraphQL 公开一个服务器端点 设计一个模式(schema) 将解析器连接到数据源 这是我们需要做的工作,但不是我们项目的工作重心。...对于突变解析器可以简单地将控制权传递给一个应用层用例。 将用例作为应用程序的重心后,从 REST 切换到 GraphQL(或同时支持两者)变得轻而易举。...API 客户端了解如何解决该请求的唯一方法是检查错误响应(指望错误消息描述了所需的信息,否则也没用)。...通过 Apollo Federation,我们可以绘制并公开由多个 GraphQL 端点组成的单个数据图 在 Federation 中,你可以组成模式并解析其他服务 / 限界上下文中的字段。...在架构层面,由于 GraphQL 仅向客户端公开单个端点,因此它满足了这一原则。 客户端隐藏了字段解析机制的所有复杂性,它只需关注如何在 GraphQL 服务器之上构建即可。

2.1K20

GraphQL 从入门到实践

它定义了字段的类型、数据的结构,描述了接口数据请求的规则,当我们进行一些错误的查询的时候 GraphQL 引擎会负责告诉我们哪里有问题,和详细的错误信息,对开发调试十分友好。...args:查询中传入的参数 context:提供给所有解析器的上下文信息 info:一个保存与当前查询相关的字段特定信息以及 schema 详细信息的值 解析函数的返回值可以是一个具体的值,也可以是...一些常用的解决方案如 Apollo 可以帮省略一些简单的解析函数,比如一个字段没有提供对应的解析函数时,会从上层返回对象中读取和返回与这个字段同名的属性。...# 执行时发生错误 { "errors": [ ... ] } 如果执行时发生错误,则 errors 数组里有详细的错误信息,比如错误信息、错误位置、抛错现场的调用堆栈等信息,方便进行定位。...解析函数层,给 GraphQL 的 Query、Mutation、Subscription 请求提供 resolver 解析函数 src/schema.graphql:Schema 层 然后 npm

2.5K31

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券