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

【译】如何在 Node.js 中创建安全的 GraphQL API

原因很简单,因为 GraphQL 官方团队提供的文档非常全,并且 Introduction to GraphQL 列出了几个最佳实践。 什么是 GraphQL 查询?...GraphQL 一些场景中非常适合。REST 是一种架构设计模式,很多场景中也得到了验证。如今,有大量的文章试图证明为什么一个比另一个好,或者你应该使用 REST 而不是 GraphQL。...初始化项目 我们先创建一个名为 node-graphql 的文件夹。然后我们打开一个终端或者 git 控制台,并使用 npm init 来初始化。...控制台中应该会看到我们打印的内容 Hello Graphql Node API tutorial。...):我们要从服务器获取的内容 Mutations(变更):请求将会改变服务器中的数据 现在,我们重新执行一下 npm start,我们可以看到控制台中显示了以下消息:Node Graphql API

2.5K20

英国卫报基于 Serverless、React 和 GraphQL 构建内容协作工具 Pinboard

作者 | Rafal Gancarz 译者 | 明知山 策划 | Tina 英国卫报创建了一个讨论和资产共享工具 Pinboard ,并将其整合到公司使用的各种内容管理平台中。...卫报高级软件工程师 Tom Richards 解释了为新闻编辑部创建协作工具的必要性: 在过去的几年里,新闻编辑部的许多数字沟通都是通过电子邮件和聊天进行的。...为了满足编辑人员的需求,一个小团队一直开发一个工具,该工具将与现有的基于 Web 的工具紧密集成,提供消息传递和资产共享功能。...它使用 Apollo 作为 GraphQL 客户端库。服务器端,使用 AWS Lambda 执行所有业务逻辑,使用 AWS RDS for PostgreSQL 存储用户和项目数据。...GraphQL 不仅支持 查询,还支持 mutation,这些是用于添加 / 修改数据的操作,因此由 GraphQL 服务器按顺序执行,而不是像查询那样并行执行。

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

React18+TS+NestJS+GraphQL 全栈开发在线教育平台无密分享

React 18 + TypeScript + NestJS + GraphQL:全栈开发在线教育平台的探索随着在线教育行业的蓬勃发展,构建一个高效、稳定、用户友好的在线教育平台变得至关重要。...此外,TypeScript 的强大类型系统也方便了开发者开发过程中进行代码自动补全和错误检查。...在在线教育平台中,NestJS 可以帮助开发者快速构建出稳定、可靠的后端服务,支持用户认证、课程管理、学习进度跟踪等功能。...四、GraphQL:数据查询的革新者GraphQL 是一种强大的数据查询和操作语言,它允许客户端精确地指定所需的数据,从而避免了传统 REST API 中的过度获取和冗余数据问题。...在在线教育平台中GraphQL 可以帮助开发者更加灵活地查询和更新用户数据、课程数据等,提高数据处理的效率和准确性。

6310

用Node.js创建安全的 GraphQL API

简而言之,它基于: GraphQL查询 —— 允许客户端进行读取和控制接收数据的方式。 GraphQL 修改 —— 描述怎样服务器上写入数据。关于怎样将数据写入系统的GraphQL约定。...掌握GraphQL 我们将为自己的 GraphQL API 设计一个构思的框架,开始之前,你需要了解Node.js和Express的基础知识。...本文发布时,Nodejs.org上当前版本为10.15.3。 初始化项目 让我们创建一个名为node-graphql的新文件夹,并在终端或Git CLI控制台下使用以下命令:npm init。...终端控制台中,你应该能够看到输出的字符串“Hello Graphql Node API tutorial”。...服务器测试 好了,现在可以编写第一个自己的查询了,先定义为“hello”。 ? 第一次查询 请注意,我们typeDefs中定义它的方式,页面可以帮助我们构建查询。 这很好,但我们怎样才能改变值呢?

1.6K30

如何在纯 JavaScript 中使用 GraphQL

这是因为许多教程和示例代码似乎都基于这样一个假设,也就是说如果你使用 GraphQL,就需要使用这些库。 但是,一个GraphQL API 的查询只不过是一个定制格式的 HTTP 请求而已。...当查询包含多个命名操作的查询时,它用于指定要运行的操作。 如果你将一个 GraphQL 作为一个 GET 请求发送,则需要将以上内容作为查询参数传递。...我们来看一个不使用特殊库的简单示例(请注意,我确实使用了 dotenv 来获取用于访问我 StepZen 后端的 API 密钥)。在这个示例中,我仅传递了一个 query,该查询发送前需要字符串化。...(error) => { console.error(error); }); req.write(data); req.end(); 同样,返回的数据只是 JSON 而已,因此如果我们要运行它,则控制台中的输出将是...这应该是一个 JSON 格式的列表,其中查询所需的每个变量 JSON 中都有一个对应的值。

3.5K10

一位前端专家构建GraphQL工程的心路历程

实际应用中客户端将要获取的字段通过Schema文本的方式发送给服务端,服务端接收处理后返回json格式的数据。 GraphQL提供了一套统一模型定义,拥有灵活的按需查询的能力。...GraphQL中授权可能针对的是某个字段,如图所示query查询的是小明的工资,由于工资只能自己查看,所以要在resolver中加入一段授权逻辑保证查询者为本人。...上图是数据库中的两条用户记录,他们互为friend,通过两段代码分别查询用户和他们的friend。 ? 这是上面代码请求的时序图,可以看到一共发出了4次请求,但最终获取到的数据只有两条。 ?...为此我编写了rdb-dataloader模块,让PK和UK的查询都在同一个实例中,达到复用缓存的目的。...注意红框中的代码,这里先通过name查询出一条记录,然后对这条记录经由ID做第二次查询,显然第二次查询不会发出,而是会使用缓存。方案的核心在于缓存记录的全部字段,数据量的控制应该由分页逻辑来关心。

2.6K10

安息吧 REST API,GraphQL 长存

REST API 中,没有客户端请求语言。客户端无法控制服务器返回的数据。没有任何语言可以这样做。更确切地说,可用于客户端的语言非常有限。...现在,将 GraphQL 查询与我们为数据定义的声明式的 React UI 进行比较。GraphQL 查询中的所有内容都在 UI 中被用到,UI 中的所有内容都会显示 GraphQL 查询中。...此外,由于 GraphQL 只是一个解析层,我们可以 GraphQL 下的更底层处理速率限制。...如果我们将 GraphQL 查询响应范式化为一个扁平的记录集合,给每条记录一个全局唯一的 ID,那么我们就可以缓存这些记录,而不是缓存完整的响应。 然而这不是一个简单的过程。...记录将会相互引用,我们将在其中管理循环图。操作和读取缓存需要遍历查询。尽管我们需要编写一个中间层来处理这些缓存逻辑,但是这种方式总体上比基于响应的缓存更有效率。

2.7K30

GraphQL API 的新趋势:驱动数据交换的未来技术

最近一份 Gartner 报告预测,尽管仅有 10%的企业 2021 年将 GraphQL 作为其内部数据层实施,但到 2025 年这个数字将增加到全球企业的 50%以上。...基于模式的开发 基于模式的开发强调在实现 API 之前设计并记录 GraphQL 模式的重要性。...部分查询结果 部分查询结果允许 GraphQL API 某些字段或操作由于错误或限制而失败时返回部分数据,这种方法通过使客户端应用程序接收和处理部分数据来增强 GraphQL API 的弹性,从而在面对错误时提供更良好的用户体验...编译器的日益普及 编译器优化 GraphQL 查询、增强 GraphQL API 的性能、类型安全性和开发人员体验方面发挥着至关重要的作用。...通过了解和适应不断变化的 GraphQL 生态系统,企业可以开启新机遇,并推动数字转型计划向前发展。

25820

2021年11个最佳无代码低代码后端开发利器

定价 免费版:无限制,每个基础限制1200条记录和2GB的附件。 Plus版:每月花费12美元,每个有5000条记录,快照历史,每个有5GB的附件。...它提供了一个基于Postgres的专用数据库。它也支持导入现有的数据库。此外,它还内置了对集成JWT认证的认证API请求的支持。这使你能够控制你的应用程序用户可以访问的内容。...使用Supabase时,你将在其图形用户界面(GUI)中度过大部分时间。它还提供了一个SQL编辑器,你可以用它来编写自定义的SQL查询,以操作表中的数据。...这通常意味着一个无代码或低代码平台必须为Firebase提供一个开箱即用的集成,以便在他们的平台中使用。...◆ Hasura 最适合那些正在寻找基于GraphQL的快速解决方案并希望向后兼容REST的专家。 Hasura是一个即时的实时GraphQL APIs引擎。

12.5K20

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

GraphQL 的操作类型如下: 查询(读取); 突变(写入 / 更新); 订阅(连续读取)。 这些操作都只是一个字符串,需要根据 GraphQL 查询语言规范进行构造。...因为这是一个服务,不需要 main.bal 文件,所以可以把它删除。 创建记录类型 添加一个叫作“bookservice.bal”的 Ballerina 文件,用于实现 GraphQL 服务逻辑。...创建所需的记录之前,需要分析一下根据指定 ISBN 从 Google Books API 获取的的 JSON 响应消息的格式。它返回一个 JSON 对象,其中包含了一个“items”的数组。...使用记录类型作为对象有局限性,因此,在这个示例中,我们使用服务类型来表示“Book”对象。 在这个服务中,“BookDetails”是一个 final 的只读字段,初始化后不能被赋值。...你可以命令行中使用 curl 向端点发送 HTTP POST 请求,并将 GraphQL 查询作为 JSON 传递给它。

2.4K20

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

例如将‘分’单位的数字价格转为‘元’单位的价格文案、使用默认值兜底 null、将状态 code 转换成对应文案等; 列表过滤、排序:通过 id 列表查询出数据详情列表之后,往往需要根据详情信息对结果列表进行过滤排序...的 key 前缀拼接到 itemId 前边、作为请求 Redis 数据源的 key; 数据编排依赖:类似于 MySQL 中的子查询,将一个字段的解析结果作为另一个字段的获取参数; 控制流:通过请求变量判断是否请求指定的字段...自定义指令实现思路相同: 根据数据处理需求设计指令; 查询中使用指令对查询元素进行注解描述; 查询引擎中获取指令信息和查询上下文,执行符合指令语义的行为。...问题和方案 基于 Instrumentation,GraphQL-calculator实现了一套具有参数处理、结果字段加工、数据依赖编排和控制流能力的指令集。...先后美团快手从事 GraphQL 的平台化开发。 点击文末【阅读原文】移步InfoQ官网,内容更多更精彩!

1.1K20

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

真实业务场景中,除了获取基础数据外,往往还会有一些对数据进行加工转换和编排控制的需求,例如对数值字段取精或者转换成展示文案、对列表字段进行排序过滤去重、根据条件判断是否请求查询中的某些字段、将一个字段的解析结果作为另外一个字段的入参等...原生的 GraphQL 查询为获取基础数据提供了便捷,但是计算能力不足导致其结果经常不能满足业务需求,数据往往需要加工转换、甚至经过多次编排查询,才能展示给用户。...规范并不会限制指令只能定义可执行位或者类型系统位,但是为了明确指令是用在查询上、还是对于类型系统生效,往往只将指令的生效位置限定在其中一种: 对于可执行位指令,其作用往往跟业务场景相关。...执行引擎 GraphQL 的 Java 实现提供了 Instrumentation 机制,该机制可在查询的各个阶段获取到执行上下文,可对执行信息进行记录、修改。...,经常在记录中间数据或在不同的执行线程间传递数据。

1.2K20

GraphQL是API的未来,但它并非银弹

作者 | Jens Neuse 译者 | 平川 策划 | 蔡芳芳 我认为,GraphQL 将改变世界。将来,你可以使用 GraphQL 查询世界上的任何系统。我创造这样的未来。...然后他总结道, GraphQL 中,graph 只有一个版本,变更可以模式注册表中跟踪,这是 Apollo 的一个付费功能。因为这个原因,你版本控制方面不会有任何问题。...需要说明的是,如果你无法控制客户端,确实就需要某种版本控制。如果你只有一个 Web 应用程序,就不需要此功能。但那时,GraphQL 可能也就不必要了。...6 减少记录和浏览 API 的时间 下一节将介绍如何将 OAS 这样的工具用于 RESTful API 开发,以及微服务环境中维护多个 OAS 所面临的挑战。...需要有人坐下来,编写如何使用 API 的示例查询和用例。否则,真的很难上手。 因此,尽管社区一直在说,“GraphQL 是自记录的”,但这个特性本身并不能成为一个有用的 API。

2K10

防止你的GraphQL API被恶意查询

我们查找了一下,发现了graphql-depth-limit,这是Andrew Carlson写的一个可爱模块,它使我们能够轻松限制传入查询的最大深度。 ...尝试使用糟糕的查询来崩溃或放慢API,来检测它的承受能力 – 也许你的API是没有这些嵌套关系,或者它可以处理一次获取数千条记录,而且没有问题,这是不需要做查询成本分析的!...(The GitHub GraphQL API also uses Query Cost Analysis) 实施查询成本分析 npm上有几个包来实现查询成本分析。 ...前两名是graphql-validation-complexity,一个即插即用模块,或graphql-cost-analysis,它可以让你指定@cost指令,从而获得更多的控制。 ...我们使用graphql-cost-analysis进行分析,因为我们最快的解析器(20μs)和最慢的解析器(10s +)之间存在很大差异,所以我们需要从中获得控制

1.8K10

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

创新保护:2023年应对API安全漏洞的前沿策略本周讨论API安全挑战的两篇文章中的第一篇中,介绍了Katrina Thompson的想法。作者强调了API构建当今数字基础设施方面的重要性。...实施授权和访问控制:限制API的访问仅限于经过授权和验证的用户或应用程序,使用令牌、密钥或其他访问控制机制,确保只有合法用户才能使用API。...监控和日志记录:实时监控API的使用情况,并记录重要操作和事件,这样可以快速检测异常行为并采取适当的响应措施。...这可以使用Burp Suite手动完成,也可以通过将通用查询发送到常见的GrahpQL API端点来完成,如下所示:/graphql/api/api/graphql/graphql/api/graphql...它发出一个内省查询,请求给定 URL 的所有查询和突变(通过指向实时终结点的链接或通过 JSON 文件),并提供结构化视图以帮助您浏览结果。

24530

「web应用架构」有原则GraphQL

尽管名为GraphQL,但它并不是一种简单的查询语言。这是一个全面解决现代应用与云服务之间连接问题的方案。因此,它构成了现代应用程序开发堆栈中一个新的重要层的基础:数据图。...通过一个图形,你可以最大化GraphQL的价值: 可以通过一个查询访问更多的数据和服务 代码、查询、技能和经验可以跨团队移植 所有图形用户都可以查看的所有可用数据的中心目录 实现成本最小化,因为图形实现工作不重复...3.跟踪注册表中的模式 应该有一个单一的事实来源来记录和跟踪图表。 就像在版本控制系统中跟踪源代码很重要一样,模式注册表中跟踪图形的定义也很重要。...虽然经常讨论访问控制,但也需要注意需求控制,因为它在GraphQL的任何生产部署中都是至关重要的。允许用户不考虑成本执行任何可能的查询是错误的,因为用户没有能力管理它对生产系统的影响。...图形操作的记录称为跟踪。

73010

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

GraphQL GraphQL 于 2012 年在 Facebook 内部开发, 2015 年公开发布之前,是一种部署 Facebook、Shopify 和 Intuit 等公司的数据查询语言。...尽管 GraphQL 越来越受欢迎,但在广泛采用、最佳实践和工具方面的成熟度仍然存在问题。 API 版本控制/维护下,您会认为“否”是不好的,但实际上是好的。...您可以使用 GraphQL 和 ORDS 执行其中一些操作,但它们没有标准化或以实现互操作性的方式记录。...API 版本控制和维护 一个令人头疼的问题是 API 更改时处理应用程序的更新,同时还要维护旧版本。导致 REST API 令人头疼的最大问题是,当您查询端点时会返回所有字段。...OData 更加灵活,因为可以轻松编写查询以返回所有字段。OData 正在将模式版本控制添加到规范中以解决此问题。

2.1K30

API协议设计的10种技术

对于 API 而言,GraphQL 被视为一种新思路。GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时环境。... GraphQL 中,类型系统用于描述 GraphQL Server 的能力并用于判断一个查询是否有效。...一旦启动某个 GraphQL Server,它就能接受 GraphQL 查询,并验证和执行该查询。...即便如此,确定是否要使用 GraphQL 技术时,仍需要做认真的分析,且不可为了追新而采用 GraphQLGraphQL查询具有多条记录的数据库的极佳选择。...对信息安全而言,EDI可以使用加密和数字证书等安全措施,而API可以使用访问控制和身份验证等安全措施,从而保障信息的安全性。同时I可以通过数据分析来实现数据的挖掘和分析。

28710

干货 | GraphQL 基于 SPA 架构的工程实践

这其实是一个开发模式的问题,我刚开始写 GraphQL 代码的时候,代码是这样的,其实这段代码也是 graphql-js 的官方 repo 上抄来的,但是我的代码跟它是一样的,但是现在看来我不会这样写...先引入缓存,引入缓存之后第二轮的查询第一轮缓存结果中找到,非常幸运的是第二轮不需要发新的请求了。 ? 再进一步深挖一下,如果第一轮请求能够合并成一个请求,这样就太棒了。 ?...这个模块其实它的作用很简单,就是我无论查询PK还是查询 UK,一个实例里面搞定,让它复用缓存,看红框中的代码,先通过“name”来查询一条记录,然后把这条记录通过它的ID来进行第二次查询,第二次查询显然是不会发出去...所以要实现这样的功能其实这里面有一个问题,你缓存记录的时候是缓存每条记录的全部字段,让这些字段覆盖你的 UK 和 PK,你可能会担心数据量的问题,但是它其实真的不是问题,数据量控制应该由你的分页逻辑来关心的...最简单的你设置 query 文本大小来做预防肯定不行,而设置白名单那么我们使用 GraphQL 的意义又在何处,所以我们还是对 query 的深度进行控制, ?

99410

一个由“API未授权漏洞”引发的百万级敏感数据泄露

Leo下载APP进行测试后,发现该医院存在一个严重的问题,可能导致百万级敏感数据泄露……图片他发现医院APP存在GraphQL接口,可通过其自省功能获取所有API接口。...GraphQL是目前最为流行的查询语言之一,它能够让API变得轻巧、灵活,而且对于开发人员十分友好且方便他们进行快速开发。但是它也容易放过、甚至给应用程序服务器带来各种恶意的查询。...并且随着API普遍被使用,针对它的攻击尝试也迅速增加。这意味着开发人员和API生产者保证他们的GraphQL API 安全至关重要。...比如说7亿多Linkedln用户的数据泄露,并在暗网被售卖;Parler网站涉及1000万用户超过60T的数据泄漏;Clubhouse泄露130万条用户记录……究其根因,其实就是——API不够安全。...千行百业数字化转型的背景下,API成为了数字化体验的中心,APP、Web网站和小程序等应用的核心功能、微服务架构等均离不开API的支持。

68720
领券