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

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

GraphQL最常见的是通过 HTTP 来发送请求,那么如何通过 HTTP 来进行 GraphQL 通信呢?举个栗子,如何通过Get/Post方式来执行下面的GraphQL查询呢?...,也就是说,GraphQL API存在一个类似于JSON的特殊格式,且请求中的参数和返回结果一一对应。...除此之外,GraphQL 的操作类型可以是 query、mutation 或 subscription,它们分别代表了查询、变更和订阅,在使用GraphQL API发送的请求中也必定包括这些操作类型的特征字段...判断参数值是否GraphQL特殊的数据结构提取响应参数是否和数据结构中一一对应识别匹配在请求中是否存在代表GraphQL API操作的特殊字段,例如"query"、"mutation" 或"subscription...所以SOAP API的识别只需要识别请求-响应是否为XML的数据格式,并且在对请求中的XML数据格式进行解析后,匹配是否存在Envelope、Body及其内容的特殊字段

59720

GraphQL 初体验,Node.js 构建 GraphQL API 指南

但是,与任何框架或语言一样,GraphQL 也需要权衡取舍。在本文中,我们将探讨使用 GraphQL 作为 API 查询语言的利弊,以及如何开始构建实现。...如果你不确定应用程序的需求以及将来如何存储数据,则 GraphQL 在这里也很有用。要修改查询,你只需要添加所需字段的名称,这极大简化了随着时间推移而发展你的应用程序的过程。...另一部分涉及实际获取数据,这是通过使用解析器完成的,解析器是一个返回字段基础值的函数。 让我们看一下如何在 Node.js 中实现解析器。...GraphQL 的类型功能会给查询过程提供严格的校验,你甚至可以尝试请求不存在字段。...简而言之,它是识别给定用户是否有权查看某些数据的过程。我们可以想象一下这样的场景:经过认证的用户可以执行查询来获取自己的地址信息,但应该无法获取其他用户的地址。

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

GraphQL 在微服务架构中的实践

Schema 中绝大多数的类型都是普通的对象类型,但是每一个 Schema 中都有两个特殊类型:query 和 mutation,它们是 GraphQL 中所有查询的入口,在使用时所有查询接口都是 query...授权 我们可以选择GraphQL 服务中增加授权的功能,也可以选择在各个微服务中判断当前用户是否对某一资源有权限进行操作,这其实是集中式跟分布式之间的权衡,两种方式都有各自的好处,前者将鉴权的权利留给了各个微服务...小结 认证与授权的设计本来是系统中一件比较灵活的事情,无论我们是否在微服务架构中使用 GraphQL 作为对外的接口,将这部分逻辑交由直接对外暴露的服务是一种比较好的选择,因为直接对外暴露的服务中掌握了更多与当前请求有关的上下文...在开发各种内部服务时,我们通过 scope 的方式对用户是否有权限读写资源做了限制,内部服务在执行操作前会先检查请求的用户是否能够读写该资源,然后开始处理真正的业务逻辑,也就是说用户鉴权是发生在所有的内部服务中的...由于面向 B 端用户可能涉及到较多的查询请求,并且这些请求非常复杂,我们可以选择使用从库的方式同步其他服务的数据,在服务内部实现相应的查询功能,当然也可以使用数据中心或者仓库的方式将数据处理后提供给面向

1.5K10

GraphQL 在微服务架构中的实践

和 mutation,它们是 GraphQL 中所有查询的入口,在使用时所有查询接口都是 query 的子字段,所有改变服务器资源的请求都应该属于 mutation 类型。...授权 我们可以选择GraphQL 服务中增加授权的功能,也可以选择在各个微服务中判断当前用户是否对某一资源有权限进行操作,这其实是集中式跟分布式之间的权衡,两种方式都有各自的好处,前者将鉴权的权利留给了各个微服务...在开发各种内部服务时,我们通过 scope 的方式对用户是否有权限读写资源做了限制,内部服务在执行操作前会先检查请求的用户是否能够读写该资源,然后开始处理真正的业务逻辑,也就是说用户鉴权是发生在所有的内部服务中的...授权 我们可以选择GraphQL 服务中增加授权的功能,也可以选择在各个微服务中判断当前用户是否对某一资源有权限进行操作,这其实是集中式跟分布式之间的权衡,两种方式都有各自的好处,前者将鉴权的权利留给了各个微服务...在开发各种内部服务时,我们通过 scope 的方式对用户是否有权限读写资源做了限制,内部服务在执行操作前会先检查请求的用户是否能够读写该资源,然后开始处理真正的业务逻辑,也就是说用户鉴权是发生在所有的内部服务中的

2.6K20

GraphQL 快速搭建服务端 API

为什么选择 GraphQL GraphQL 本身的概念和使用都比较直观,对于开发者来说,比起怎么使用它更终要的事情是了解自身需求并觉得是否需要使用 GraphQL 以及如何使用。...这种情况下,对数据类型严格要求的 GraphQL 就能有助于减少类型不严格导致的问题。在客户端,也可以放心大胆地根据事先给定的数据类型来使用服务端返回的结果,不必做许多额外的检查甚至是类型转换。...另外,只要谨慎选择 code 2.3 中 LnStarship.crew 这一关系的加载方式(如我们现在使用的 lazy='select'),就可以避免无谓的数据库查询。...参数指定了是否使用浏览器 GraphQL 交互 IDE - GraphiQL ,也就是我在 fig 1.1 ,fig 2.1 中展示的工具。...因为这是一个可推导字段,所以把它设计成「不存在数据库中」而是「根据真正 crew 的长度来实时计算」的一个量。

2.4K30

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

updateTime: String } mutation: { # xxx } subscription: { # xxx } } 在 Schema 定义中存在三种特殊的类型...} honour { time name } } updateTime } 如上的查询存在以下选择集: # 顶层 { contractedAuthor...Schema 可以发现其类型定义都是使用的由 graphql-js 提供的 GraphQLObjectType 等, 可以选择使用 graphql-js 提供的执行函数(graphql、execute...但同时也有一些注意事项,要真正减少调用次数,要在前端应用中集中定义好应用全局的数据结构,统一获取,如果仍然让业务组件就近获取(只让业务组件这种真正的使用方知晓数据结构),这个优势并不存在。...版本控制:客户端结构化的查询方式可以让服务追踪到字段使用情况。且在增加字段时,根据结构化查询按需查询的特点,不会影响旧的调用(虽然 JavaScript 对多了个字段的事情不在意)。

2.3K20

GraphQL及元数据驱动架构在后端BFF中的实践

展示单元:尽量只封装1个展示字段的加工逻辑。 分开的好处是简单且可被组合使用,那么具体如何实现组合使用呢?...而我们仅仅希望使用GraphQL的按需查询特性,却被GraphQL本身拖累了,业务开发同学的关注点应该聚焦在业务逻辑本身才对,这个问题如何解决呢?...1查N:根据一个条件查询多个结果。 N查N:一查一或一查多的批量版本。 由此,我们对查询接口进行了标准化,业务开发同学基于场景判断是那种,按需选择使用即可,取数接口标准化设计如下: ?...图11 查询接口标准化 业务开发同学按需选择所需要使用的取数器,通过泛型指定结果类型,1查1和1查N比较简单,N查N我们对其定义为批量查询接口,用于满足"N+1"的场景,其中batchSize字段用于指定分片大小...我们可以知道当前对象实例是否是其所在字段实例的最后一个对象。

1.6K50

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

主要问题仍然存在。你可能会说你的 API 是 RESTful 的,但是对于如何安排端点或是否应该(例如)使用 HTTP 方法PATCH进行对象更新,一般没有严格的规则。...你是否总是希望一次获取所有相关的项目?可能不需要,但是还需要添加更多的查询参数。也许你不想一次获取所有对象字段。...GraphQL 如何做得更好? 对于所有讨论过的问题,我倾向于认为,在 CRUD 应用程序中,有一种标准方式来生成和使用 API 会非常棒。...此模式中的其他变体和查询也是如此:对输入进行类型检查和验证,并且基于查询GraphQL 服务器知道期望的结果形状。...你可以将所有常见的 CRUD 操作暴露为所有表的查询和修改。它可能看起来像 ORM,但它不是:你可以完全控制如何设计数据库模式,以及使用什么索引。

2.3K30

【JS】197-【译】更优秀的GraphQL中文文档-服务器端

Schemas and Types 本文中,你会学到 GraphQL 类型系统的所有细节并且它是如何去描述什么样的数据是可以被查询的。...Type System 如果你已经见过 GraphQL query,那么你就知道 GraphQL 查询语言基本上是在对象上查询指定的字段。...“根”对象开始 在 hero 地段上做选择 对于 hero 返回的对象,我们选择 name 和 appearsIn 字段 因为 GraphQL查询与结果在结构形式上高度匹配,你就可以预测服务端会返回什么样的数据而不用关心服务端具体是怎么实现的...ID 类型和 String 使用一样的方式来 serialize;但是当我们定义 ID 时并不要求其可读性高 在大多数 GraphQL service 实现中,经常会有一个特殊的自定义的 scalar...Enumeration types 也被叫做 Enums,这种类型是一种特殊的 scalar types,只能在特定的值的集合中选择

1K20

来试试Graphql

如果是用 RESTful api ,我们会用 postman 来测试接口是否可以跑通。同样的,GraphQL 可以用 GraphiQL 来测试。 按需取用: ?...2 个特殊类型 查询(query)和变更类型(mutation) 自定义类型 查看官方文档[2] Resolver 我们可以简单地理解成,针对我们暴露的接口,调用相应的方法去取数返回。...:查询中传入的参数 // context:这是特定查询中所有解析程序共享的对象,用于包含每个请求的状态,包括身份验证信息,数据加载器实例以及解析该查询时应考虑的任何其他内容 // info:此参数仅在高级情况下使用...,但它包含有关查询执行状态的信息,包括字段名称,从根到字段的路径等。...通过使用 dataloader,数据库的访问频次可以指数级别下降。 dataloader 是如何工作的呢,可以看下图: ?

1.9K20

GraphQL 查询你的 Django 应用

在 REST 基础中,我们增加了 fields 参数,并在 DRF Serializer 里做了特殊处理(你可以点击查看源码),实现的具体效果: # 查询 comment,并限制结果返回字段 /api/...,当不使用 Relay 时,存在一些功能缺失: Fragment \ Directives 分页、过滤 通过 DRF Serializer 定义 Mutations 所以我们需要引入额外的库来解决。...Django 默认的查询能力,对于一些特殊字段并不能完全覆盖需求,这时我们就需要针对这些内容手写一些处理逻辑。...return User.objects.get(username=username) 需要注意的是,当我们使用 resolve_ 函数去处理查询时,GraphQL 和 REST 本质上只是查询 DSL...适合成熟的客户端开发团队,反之 REST 是更好的选择 Django 相关的生态建设并不完善,没有一个足够强大、开箱即用的整合方案 由于查询并不是基于 Uri 维度,会给周边配套的生态—— 监控、日志等

2K60

与我一起学习微服务架构设计模式8—外部API模式

处理局部故障 方法: 1、多实例,负载均衡 2、断路器模式 和其他服务一样,必须实现整个架构中选择的各种模式 实现一个API Gateway 使用现成的API Gateway产品或服务 可以选择AWS...开发自己的API Gateway 开发API Gateway更好的起点时使用满足如下要求的框架: 实现定义路由规则的机制以简化复杂的代码 正确实现HTTP代理行为,包括如何处理HTTP标头 Netflix...执行GraphQL 使用GraphQL的主要好处是它的查询语言为客户端提供了对返回数据的令人难以置信的控制。客户端通过向服务器发出包含查询文档的请求来执行查询。...简单情况下,查询文档包含查询的名称,参数值及要返回结果的对象字段。 把模式连接到数据源 当GraphQL服务器执行查询时,必须从一个或多个数据存储中检索所请求的数据。...GraphQL通过递归调用Query文档中指定的字段解析器函数来执行查询。首先,它执行查询解析器,然后递归调用结果对象层次结构中字段的解析器。

1.3K30

GraphQL

这样过分使用带宽会非常影响性能,还会带来额外基础设施成本 机智的后端开发者会轻蔑一笑,并快速实现个特殊查询参数叫fields,接受一组字段名,可以动态决定具体请求应该返回哪些字段 例如,我们可能会用curl...甚至还会有另一个特殊查询参数actor_fields,用来指定actor模型应该含有哪些字段,例如curl http://localhost:3000/moviesAndActors?...版本控制难的一个因素是通常很难知道什么信息在被哪些应用和设备使用 添加信息一般很容易,无论是REST还是GraphQL,添加字段的话,会流入REST客户端,而会被GraphQL安全忽略,除非改变查询。...事实上,GraphQL就是提供了这样的通用定义 那么最大的问题应该是存在冗余查询,因为能自由组合field返回的前提是先精确到field级。...,和维护n个接口且存在同一接口不同版本的情况,几乎不用思考如何选择 至于前端生态配合(Redux毕竟不那么通用),明显不算是大问题

1.5K40

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

GraphQL最棒的特性就是提供了一个丰富语言集来描述获取数据的API。但是用户该如何描述这种查询语言,以及GraphQL这项核心技术本身呢?let's talk!...变量定义(Variable definitions):当客户端向GraphQL服务器发送查询时,会存在查询文档不变,当某些字段会动态变化的情况。这些就是查询中的变量。...因为GraphQL是静态类型的,它可以实时验证你是否传递了正确的变量。这正是你声明变量类型时所计划提供的能力。...GraphQL查询必须包含一个标识选择集的字段,且该字段返回的是对象类型,选择集不能设置在返回值是标量类型(Scalar Types)的字段上,例如Int或者String。...就像操作(operations)一样,片段也选择集,使用起来也跟在操作(operations)中使用选择集一样。

2.8K20

GraphQL 实践与服务搭建

请求进行查询,其集中的 API 如 http://localhost:3000/graphql,所有的操作都通过这个接口来执行,这会在后面的操作中在展示到。...query​ 查询所有 People 并且只获取 name、gender、height 字段 查询 personID 为 1 的 Person 并且只获取 name,gender,height 字段...,不过本文侧重搭建GraphQL 服务,因此前端暂不演示如何使用 GraphQL。...在上面一开始的例子中是 Code First 方式,通常使用该方式即可,无需关心 Schema 是如何生成的。下文也会以 Code First 方式来编写 GraphQL 服务。...至于如何选择,可以参阅官方 GraphQL 最佳实践,至于说有没有必要学 GraphQL,这篇文章 都快 2022 年了 GraphQL 还值得学吗 能给你答案。

5.2K10

如何使用JavaScript 将数据网格绑定到 GraphQL 服务

GraphQL 的美妙之处在于您可以准确定义要从服务器返回的数据以及您希望其格式化的方式。它还允许您通过单个请求从多个来源获取数据。 GraphQL使用类型系统来提供更好的错误检查和消息传递。...我们的查询如下所示: { products { productId productName } } 这是我们的查询测试器中的结果: GraphQL 就是这么简单!...实际使用 日常开发过程中我们可以用我们常用的JavaScript来直接操作GraphQL,并将自己想要的数据呈现在页面上, 我们可以参考这个简单的应用程序,我们将仅使用 fetch API 来调用 GraphQL...GraphQL 的一个很酷的事情是我们可以便可以在一个查询中加载产品和类别两类信息!...本教程展示了 GraphQL 和 SpreadJS如何简单地构建应用程序。 GraphQL 和 SpreadJS都有更多功能可供探索,因此您可以做的事情远远超出了这个示例。

12010

GraphQL 基础实践

这也意味着 GraphQL 并不关心数据存在什么数据库上。 同时 GraphQL 也是一套标准,在这个标准下不同平台不同语言有相应的实现。...如果换作是硬件对比网站,需要查询的硬件数量往往不止两个。此时编写冗余的选择集显得非常的费劲、臃肿以及难维护。为了解决这个问题,我们可以使用片段功能。GraphQL 允许定义一段公用的选择集,叫片段。...GraphQL 的片段结构符号将片段内的字段“结构”到选择集中。 ? 接口(Interface) 与其他大多数语言一样,GraphQL 也提供了定义接口的功能。...内联片段(Inline Fragment) 对接口或联合类型进行查询时,由于返回类型的不同导致选取的字段可能不同,此时需要通过内联片段的方式决定在特定类型下使用特定的选择集。...GraphQL 的优缺点 优点 所见即所得:所写请求体即为最终数据结构 减少网络请求:复杂数据的获取也可以一次请求完成 Schema 即文档:定义的 Schema 也规定了请求的规则 类型检查:严格的类型检查能够消除一定的认为失误

12.8K20

防止你的GraphQL API被恶意查询

在这篇文章中,他描述了他们是如何在攻击中保护GraphQL API。 使用GraphQL,你可以随时查询想要的内容。 这对于使用API来说是惊人的,但也具有复杂的安全隐患。 ...query.length > 2000) {     throw new Error('Query too large');   }   next(); }); 不幸的是,在实践中这样做效果并不佳:该检查可能会允许使用字段名称进行讨厌的查询...,或者使用字段名称或嵌套片段来防止合法查询。...如果我们只通过查询白名单,已经严重限制了他们的选择,并且破坏了拥有GraphQL API的重要性。 那些限制是我们无法使用的,所以我们得重新设计。...我们使用graphql-cost-analysis进行分析,因为我们最快的解析器(20μs)和最慢的解析器(10s +)之间存在很大差异,所以我们需要从中获得控制。

1.8K10

安息吧 REST API,GraphQL 长存

UI 需要哪些数据,与开发人员在 GraphQL 中声明该数据的方式之间存在紧密的联系。 本文将详细介绍 GraphQL 如何解决所有这些问题。...例如,客户端不能指定为该资源中的记录选择哪些字段。这意味着 REST API 服务将始终返回所有字段,而不管客户端实际需要哪些。GraphQL 针对这个问题定义的术语是超量获取不需要的信息。...这些 API 中的每一个最终都会变成一个具有常规 REST 端点 + 由于性能原因而制定的自定义特殊端点的组合。这就是为什么 GraphQL 提供了更好的选择GraphQL如何做到这一点?...如果我们有一个 GraphQL 查询,我们明确知道如何在 UI 中使用它的响应,因为查询与响应具有相同的“结构”。我们不需要检查响应才知道如何使用它,我们也不需要有关 API 的任何文档。...GraphQL 查询字段被设计为独立的功能,并且使用数据库中的数据解析这些字段可能会导致对已解析字段产生新的数据库请求。

2.7K30

数据流动方式迭代:Netflix Studio 的 Data Mesh 实践

消费者模式 消费者模式(Consumer Schema)定义了下游处理器如何使用数据的方式。请参见下面的示例。...两种类型的处理器 将所有字段从上游一直传递到下游 示例:过滤器处理器(Filter Processor)、接收器处理器(Sink Processors) 选择加入模演进示例 使用上游字段的子集。...选择加入(Opt in):所有上游字段都将被传播到处理器中。例如,当上游添加一个新字段时,它将自动传播。...选择退出(Opt out):只有一部分字段使用 “Is Consumed” 复选框来定义)会在处理器中传播并使用。其余字段的上游变更不会影响到该处理器。  ...审计的相等性检查(即查询结果应该相同),在多次运行中两个数据集之间的对称差异应该为空,并且在 SLA 内应该最终一致性。

1.1K20
领券