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

【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS

我们一直在根据 AWS re:Invent、Oracle OpenWorld、Dreamforce、API World 等行业活动大量讨论跟踪这些主题。...这是 GraphQL 优势之一,我稍后会介绍。 图 2 在图 2 ,我们完成了要考虑其他标准初步分析,并将在以后文章扩展这些领域。...OData 通过提供一个选择列表来将返回字段限制为应用程序所需字段数,从而提供类似的功能。这减少了应用程序响应大小和处理。但是,它没有提供一种机制来指示字段已被弃用。...例子 为了直观地说明使用这些 API 差异,以下两个代码示例展示了如何在 GraphQL 和 OData 执行“排序依据”。...您执行 POST,准确定义要包含在响应字段和函数。 因此,尽管 GraphQL 使您能够从元数据确定哪些字段和函数可用,但您仍然不知道它们在语义上含义。

2K30

防止你GraphQL API被恶意查询

在这篇文章,他描述了他们是如何在攻击中保护GraphQL API。 使用GraphQL,你可以随时查询想要内容。 这对于使用API来说是惊人,但也具有复杂安全隐患。 ...虽然在其他应用层有一些缓解措施使在开始发送查询变得困难(CORS),但它们无法完全防止发生。 大小限制 我们考虑第一种天真的方法是通过原始字节来限制传入查询大小。 ...我们检查了我们客户端,我们使用最深查询有7个级别,所以我们使用了(相当宽松)最大深度为10值,并将其添加到我们验证规则: app.use('/api', graphqlServer({   ...也就是说,也许graphql-validation-complexity你来说已经足够了,试试吧! 它工作方式是指定解析特定字段或类型相对成本。 ...总结 总而言之,我建议使用深度和数量限制作为任何GraphQL API最低保护 – 它们很容易实现,并且会提供足够安全性。 根据特定安全要求和架构,您可能还需要做查询成本分析。

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

GraphQL 快速搭建服务端 API

Starship :通过字符串类型 registry 来指定哪艘星舰 读者们会发现,在 code 2.1 我们定义字段名都是下划线风格( snake_case ) crew_num (当然这也是...对象类型定义不完全相同字段 Crew specie 在数据库中用整型表示,但这里仍将其定义为枚举型 Sepcies 。...因为这是一个可推导字段,所以把它设计成「不存在数据库」而是「根据真正 crew 长度来实时计算」一个量。...一般解决方法是限制查询深度以及数据获取大小,同时请求发起者要有必要身份认证。...结语 关于如何在服务端搭建一个简单 GraphQL 服务就说到这里,下次有机会我们会聊一下 GraphQL 客户端和在 RN 使用。欢迎大家继续关注,对于本文中内容也欢迎指正。

2.4K30

GraphQL】225-GraphQL真香入门教程

GraphQL API 数据提供了一套易于理解完整描述,使得客户端能够准确地获得它需要数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大开发者工具。...特点 请求你所要数据,不多不少; : hero 中有 name, age, sex 等,可以只取得需要字段。...便于维护,根据需求平滑演进,添加或隐藏字段GraphQL 使用类型来保证应用只请求可能数据,还提供了清晰辅助性错误信息。应用可以使用类型,而避免编写手动解析代码。 2....通用系统架构,不受语言限制。 例子: 饿了吗接口。 :接口 restapi/shopping/v3/restaurants?...客户端 这一节我们学习如何在客户端访问 graphql 接口。

8K21

GraphQL真香入门教程

GraphQL API 数据提供了一套易于理解完整描述,使得客户端能够准确地获得它需要数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大开发者工具。...特点 请求你所要数据,不多不少; : hero 中有 name, age, sex 等,可以只取得需要字段。...便于维护,根据需求平滑演进,添加或隐藏字段GraphQL 使用类型来保证应用只请求可能数据,还提供了清晰辅助性错误信息。应用可以使用类型,而避免编写手动解析代码。 2....通用系统架构,不受语言限制。 例子: 饿了吗接口。 :接口 restapi/shopping/v3/restaurants?...客户端 这一节我们学习如何在客户端访问 graphql 接口。

7K30

Salesforce 构建可扩展 API 旅程

我们使用 Kotlin 和 graphql-java(GraphQL 一个 Java 实现)实现该 API。 第一步:定义模式( schema.graphqls)。...每个 GraphQL 服务会定义一组类型。GraphQL 模式中最基本组件是对象类型,它代表了一种我们可以从服务获取对象。...简单来讲,解析器就是由开发人员提供一个函数,用来解析模式定义每个字段并从配置资源(如数据库、其他 API 或缓存等)返回值。...在本例,我们 Query 类型提供了一个名为 getClassificationInsightsByUser 字段,它接受 emailAddresses 参数。...该字段解析器函数很可能会访问一个数据库,并构造和返回 ClassificationInsightByUser 对象一个列表。

99110

MassCMS With APIJSON最佳实践

允许客户端精确指定所需数据,在单个请求获取多个资源和关联数据。使用字段选择集来指定要返回字段,可以避免不必要数据传输,提高了网络效率。...安全性APIJSON支持数据权限控制和访问控制,可以对返回数据进行过滤和限制GraphQL可以通过定义查询和变更类型来精确控制数据访问和修改权限。...GraphQL具备一定灵活性,但是对于返回数据结构定制性稍逊一筹。安全性APIJSON通过自动化数据权限控制机制,可以根据用户角色和权限来限制接口访问。...GraphQL可以通过限制查询能力和使用权限认证来提供安全性,但需要手动实现和配置。...为每个内容类型定义字段,并选择适当字段类型,文本、日期、图像等。你还可以设置关系字段,以关联不同类型内容,将产品与文章进行关联。3.

40720

「web应用架构」有原则GraphQL

实现“完美模式”真正途径是使图易于根据实际需要进行演化。 不应该推测性地将字段添加到模式。...有关废弃字段信息可以传播到使用这些字段开发人员编辑器,并提供建议替代方案 根据实时生产数据,在开发人员输入查询时,可以向他们显示查询估计成本(以延迟或服务器资源计算)。...操作原则 安全地将图部署到大规模生产环境 8. 存取和需求控制 在每个客户端基础上授予图形访问权,并管理客户端可以访问什么以及如何访问它。...在不分析实际发送查询情况下,仅将用户限制在每分钟特定查询数量是不够,因为查询可以访问大量服务,而且查询成本可以在多个数量级上变化。...根据API使用情况为合作伙伴生成发票,可以根据访问特定字段或消耗资源创建详细成本模型 所有图形操作跟踪应该集中在一个中心位置,这样就有了一个权威跟踪流。

72110

【API架构】使用 JSON API 好处

JSON API 特殊服务器端操作包括排序和分页;将返回资源数量限制为子集能力,包括 first、last、next 和 prev 链接。...JSON API 如何在实践中使用:FitBit 案例研究 让我们看看 JSON API 如何在实践实现以设计高效 API,使用 FitBit 作为现实生活案例研究。...JSON API 利用 HTTP 缓存使他们能够防止召回过时数据,从而减少冗余并提高最终用户感知速度。根据 Lee 说法,这真的开始在一个应用程序叠加多种体验。...GraphQL 许多好处,例如查询效率和减少往返调用,都可以在 JSON API 中使用稀疏字段集和复合文档进行匹配。JSON API 因此可以提供与 GraphQL 相同功能。...如上所述,让客户端和服务器共享一个通用数据模型( JSON API)有很多优点。

2.6K20

GraphQL 在微服务架构实践

另一种方式其实提供了一种集中式接口,所有的微服务对外共同暴露一个端点,在这时流量路由就不是根据请求 URL 了,而是根据请求不同字段进行路由。 ?...作为微服务开发者或者提供方来讲,不同微服务之间关系是平等,我们需要一个更高级别或者更面向业务服务提供整合 Schema 功能,确保服务之间字段与资源类型不会发生冲突。 ?...,让它们进行自治,根据其业务需要判断请求者是否可以访问后者修改资源,而后者其实把整个鉴权过程解耦了,内部微服务无条件信任来自 GraphQL 服务请求并提供所有的服务。...,能够更容易地来源用户以及其权限进行认证,而重要或者高危业务操作可以通过额外增加风控服务管理风险,或者在路由层 RPC 调用方通过白名单进行限制,这样能够将不同功能解耦,减少多个服务之间重复工作...在开发各种内部服务时,我们通过 scope 方式用户是否有权限读写资源做了限制,内部服务在执行操作前会先检查请求用户是否能够读写该资源,然后开始处理真正业务逻辑,也就是说用户鉴权是发生在所有的内部服务

1.4K10

GraphQL 在微服务架构实践

另一种方式其实提供了一种集中式接口,所有的微服务对外共同暴露一个端点,在这时流量路由就不是根据请求 URL 了,而是根据请求不同字段进行路由。 ?...,不同微服务之间关系是平等,我们需要一个更高级别或者更面向业务服务提供整合 Schema 功能,确保服务之间字段与资源类型不会发生冲突。...,让它们进行自治,根据其业务需要判断请求者是否可以访问后者修改资源,而后者其实把整个鉴权过程解耦了,内部微服务无条件信任来自 GraphQL 服务请求并提供所有的服务。...另一种方式其实提供了一种集中式接口,所有的微服务对外共同暴露一个端点,在这时流量路由就不是根据请求 URL 了,而是根据请求不同字段进行路由。 ?...,不同微服务之间关系是平等,我们需要一个更高级别或者更面向业务服务提供整合 Schema 功能,确保服务之间字段与资源类型不会发生冲突。

2.6K20

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

简化统一:内部客户端和周边客户端不再需要担心内部系统复杂性,也不需要确定调用哪个 API。GraphQL 层将复杂性隐藏在幕后。 分析:特定字段单个请求花费时间进行检测。...曝光和招聘:社区许多人 GraphQL 感到兴奋,它帮助我们吸引人才加入 PayPal。我们团队成员很高兴能在社区中分享他们学习成果,并一直在会议上发言、撰写博客文章和制作教学资源。...我们在 JS @ PayPal 公开会 上多次讨论了我们是如何在各种应用程序中使用 GraphQL 。 6 我们面临哪些挑战?...图片来源:Possessed Photography on Unsplash 我们仍在创建一种标准方法来应对 GraphQL 技术挑战,异常处理、身份认证、文件处理和批处理。...通过 GraphQL,我们能够展示我们学习、工具和字段级别的监测情况。 8 你如何开始在自己公司采用 GraphQL

3K20

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

组合 协议转换 能够为每一个客户端提供它们专用API 其他边缘功能(身份验证、访问授权、速率限制、缓存、指标收集、请求日志) API Gateway架构 具有分层模块化架构,API层和公共层,API...执行GraphQL 使用GraphQL主要好处是它查询语言为客户端提供了返回数据令人难以置信控制。客户端通过向服务器发出包含查询文档请求来执行查询。...简单情况下,查询文档包含查询名称,参数值及要返回结果对象字段。 把模式连接到数据源 当GraphQL服务器执行查询时,必须从一个或多个数据存储检索所请求数据。...GraphQL通过递归调用Query文档中指定字段解析器函数来执行查询。首先,它执行查询解析器,然后递归调用结果对象层次结构字段解析器。...缓存会利用先前获取同一象结果,以避免不必要重复调用。 为了让客户端调用GraphQL,你需要将它与Web框架集成,Express Web

1.3K30

API协议设计10种技术

在RESTful API,每个资源都可以通过唯一URL进行标识和访问。客户端可以通过发送HTTP请求来执行各种操作,获取资源、创建新资源、更新现有资源或删除资源。...GraphQL API 数据提供了一套易于理解完整描述,也让 API 更容易地随着时间推移而演进。GitHub 是使用 GraphQL 最大公司之一。...类型系统还描述了查询参数输入类型,并在 GraphQL Runtime 检查参数值有效性。一个 GraphQL 服务是通过定义类型和类型上字段来创建,然后给每个类型上每个字段提供解析函数。...例如,在 Github GraphQL Server ,使用viewer字段来描述当前登录用户信息,而viewer类型为User。...客户端(消费端)可以以更加平等地位,更加积极地参与到整个数据交互过程。借助于GraphQL类型系统,客户端可以更加自由地根据自己需求来获得自己所需,而无需受到 Server 端限制

22410

API NEWS | Jetpack WordPress插件存在API漏洞

Jetpack官方公告这个漏洞性质提供细节很少,只是指出它影响到一个API,并可能允许受影响主机文件系统进行访问。文章列出了所有受影响版本,但坚称目前没有已知该漏洞利用。...根据这篇文章,最近一项研究表明,97%企业领导者将API使用归类为未来增长至关重要,另一项研究表明,使用API平均数量比去年增长了82%。...实施授权和访问控制:限制API访问仅限于经过授权和验证用户或应用程序,使用令牌、密钥或其他访问控制机制,确保只有合法用户才能使用API。...强化身份验证:为API访问实施强大身份验证机制,多因素身份验证、OAuth等,防止未经授权访问和恶意活动。...在许多情况下,开发人员没有充分意识到API可能带来威胁,忽视了重要主题,速率限制、DDoS攻击和跨站脚本攻击。通过更好地理解这些问题,他们可以在保护API方面取得更大成功。

22730

大厂都在实践GraphQL,你了解吗?

前言 最近,GraphQL 在构建后端 API 方面获得越来越多大公司青睐, PayPal、Facebook、Hasura、去哪儿等公司都做了大量实践。...它有助于减少传输数据量。 这些只是其中一些优势。今天本文将介绍如何在 springboot 项目中实践 GrapQL API....定义模型后,让我们将其放在资源目录文件夹 graphql 下,文件名为 schema.graphqls 。Spring 会自动读取扩展名为 *.graphqlss 模型文件。...spring: graphql: graphiql: enabled: true 有了这个,就可以访问 /graphiql 路径上 UI .它将自动扫描资源目录模型,以帮助开发人员验证... GranphQL有兴趣同学可以在官网https://graphql.org/ 进一步了解更深入知识。

2.1K40

React服务器组件入门

值得一提是,Waku 目前正在快速开发,只应在非生产项目中使用。 React 服务器组件简介 所以我看法是:RSC 使 React 开发人员能够在组件级别访问异步服务器端请求和结果数据。...在 RSC 之前,Next.js、Gatsby、Remix 和 Astro 等框架要求你在路由级别进行服务器端请求。 以下是一些示例,说明你如何在上述每个框架实现此目的。...在组件级别访问数据方法可能对某些人来说很熟悉。...在许多情况下,它们可能不是正确选择,但这没关系。 正如每个开发人员在其职业生涯多次任何给定方法所说那样,这取决于具体情况。...我从使用 Gatsby 经验中知道,从组件轻松访问数据是有好处

8310

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

如果你应用程序不断增大,你会发现自己在你架构添加了更多存储结构 -- PostgreSQL 可能是存储用户信息好地方,而 Redis 可能是存储其他种类信息好地方 -- GraphQL...: User } type User { // ... } type Address { // ... } 根据你选择语言,将此模式合并到服务器过程会有所不同,但通常将信息用作字符串就足够了...另一部分涉及实际获取数据,这是通过使用解析器完成,解析器是一个返回字段基础值函数。 让我们看一下如何在 Node.js 实现解析器。...除了字段参数外,解析器还可以访问父节点,以及传入特殊上下文值,这些值可以提供有关当前已认证用户信息。...最佳实践 GraphQL 规范缺少一个方面是缺乏版本控制模式指导。

8.3K40

使用 GraphQL 和 Ballerina 操作多个数据源

REST 和 GraphQL 可以被认为是解决同一问题(通过 Web 服务访问数据)两种不同方法。但是,随着客户端 API 访问需求发生了快速变化,REST API 已经变得太不灵活了。...在 Ballerina ,记录是特定类型字段集合。其中有命名键,并定义了字段类型。{|和|}分隔符表示这个记录类型只包含所描述字段。...服务类型每一个资源方法表示 GraphQL 对象一个字段,资源方法可以有输入参数,这些输入参数被映射到相应字段参数。...Ballerina GraphQL 服务 下一步是实现数据访问逻辑,也就是实现远程方法和资源方法。 完整代码在 bookservice.bal 。服务代码如下所示。...你可以在初始化客户端时提供配置信息,不过本例使用了 Ballerina 配置功能来提供配置信息。用户可以根据不同环境通过外部输入来改变系统行为,而且敏感数据(密码)不会通过代码暴露出来。

2.4K20

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

根据上图可见,API资产信息除了基础信息外,还必须包含API资产关联信息,:部署IP、API访问源、通信次数等统计信息;API通信拓扑,功能标签、业务域划分信息;API安全风险监测信息;API数据安全监测信息等...在获取过滤后流量后,将根据协议类型HTTP、Dubbo、GRPC等协议类型进行完整包解析,对于复杂参数结构,JSON、XML和各种复杂编码,则使用各种解析引擎进行解析。...正因如此,GraphQL API相比于RESTful API,GraphQL 只用一个数据源就可以查询所有数据,所有的请求都可以访问一个服务端点;并且GraphQL 返回结果响应准确地根据客户端请求字段...,也就是说,GraphQL API存在一个类似于JSON特殊格式,且请求参数和返回结果一一应。...判断参数值是否为GraphQL特殊数据结构提取响应参数是否和数据结构中一一应识别匹配在请求是否存在代表GraphQL API操作特殊字段,例如"query"、"mutation" 或"subscription

49720
领券