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

GraphQL(四):GraphQL工程化实践

return responseBody; } }); } 显然这不能满足项目工程化的要求,解决这个问题有两种比较简单的方式: 把graphiql.html文件复制到项目中...身份认证和权限控制 在GraphQL(三):GraphQL集成SpringBoot原理中提到GraphQL本身不带身份认证和权限控制(这也确实不是它该做的事儿),但是它对查询提供了回调方法(Instrumentation...graphql-java + graphql-java-spring 此方案使用了SpringMVC的DispatcherServlet,所以完全可以复用原有的拦截器机制,权限认证需要基于Instrumentation...对项目的现有流程改动小(最大化复用现有逻辑) 支持权限控制 自动解析schema 不用硬编码、不要底层细节 这么一看的话可以得出这样的方案: 可以同时使用SpringMVC的拦截器和graphql-java-tools...风险 工程化实践时风险是必须要考虑的问题,GraphQL强大的自省功能(查询整个实体图的结构)能方便开发,也带来了相应的风险同时嵌套循环查询、sql注入等问题也是需要防范的。

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

你需要 GraphQL 吗?

安全风险 GET 或 POST 请求的 Path 通常是描述该 API 功能的,链接就暴露了 API 功能对于黑产做中间人攻击非常有利。...当我们使用 HTTP/1.1 以上时,还可以多路复用,避免多个 TCP 慢启动,但多个请求毕竟每个都带有 HTTP 头,而且分包上也会有损耗。如果可以通过一个请求实现所有数据获取,那就最好不过了。...解决痛点 GraphQL 便很好地解决了当前 REST 请求模式的缺点,它是如何解决的呢?我们带着这个疑问了解一下它。 GraphQL特征 GraphQL,从字面上意思图查询。...同时获取多个数据 我们在上面的 query 里面可以同时放多个对象描述,可以一次性把需要的数据都拉取回来,减少网络请求数量,极大优化了网络请求负载,同时也方便前端开发。...类型系统与自省 GraphQL的基本数据类型有五种:Int、Float、String、Boolean、ID。前四种比较常见,第五种ID类型对于我们编码时可以不必关注。

2.1K70

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

Leo下载APP进行测试后,发现该医院存在一个严重的问题,可能导致百万级敏感数据泄露……图片他发现医院APP存在GraphQL接口,可通过其自省功能获取所有API接口。...GraphQL是目前最为流行的查询语言之一,它能够让API变得轻巧、灵活,而且对于开发人员十分友好且方便他们进行快速开发。但是它也容易放过、甚至给应用程序服务器带来各种恶意的查询。...并且随着API普遍被使用,针对它的攻击尝试也在迅速增加。这意味着开发人员和API生产者保证他们的GraphQL API 安全至关重要。...腾讯云WAF-API助力企业管控敏感数据如何帮助医院保障API安全,满足合规要求的同时防止敏感数据泄露呢?治本求源,要想彻底收敛风险,首先需要深入了解医院存在大量敏感数据泄露风险的原因。...通过使用腾讯云WAF-API安全,医院可以大大降低敏感数据泄露的风险,保障患者信息和医疗数据的安全同时提高医院网络和Web应用程序的整体安全性。

67520

GraphQL 是一个陷阱?

避免通用 / 类数据库模式在 GraphQL 官方网站上列为最佳实践,没有比这更明确的了。 构建一个 GraphQL 最好的模式是告诉客户端如何使用数据,而不是镜像旧的数据库模式。 ...,即使查询这种方式列入白名单(通常在构建时),但实际的调用仍由客户端决定。...【最后一条推文】另外还有一件事要讨论,如何让系统可预测的、有限度的方式变慢,往往比让系统不可预测的、无限度的方式变慢更有用,“不可预测”和“无限”延时通常同时出现。...尽可能使用异步 / 批处理数据加载(如数据加载器),不要创建基于预查询或 gql-to-sql 工具的复杂 SQL 查询常规经验)。...如果不能有效地支持通用特性,应避免使用它们,在需要且性能满足时再添加。 如果 GraphQL 设计用来解决的那些问题您遇不到,那么也没有必要用它。

98710

GraphQL详解

,为下一步查询返回做准备; 前端使用模式查询语言(Schema)来描述需要请求的数据对象类型和具体需要的字段(称之为声明式数据获取); 后端GraphQL通过前端传过来的请求,根据需要,自动组装数据字段...GraphQL应用基本架构 一个GraphQL服务仅暴露一个 GraphQL Endpoint,可以按照业务来进行区分,部署多个GraphQL服务,分管不同的业务数据,这样就可以避免单服务器压力过大的问题了...输入类型(Input Types):更新数据时有用,与常规对象只有关键字修饰不一样,常规对象时 type 修饰,输入类型是 input 修饰。...AWS AppSync:完全托管的 GraphQL 服务,包含实时订阅、离线编程和同步、企业级安全特性以及细粒度的授权控制。...Hasura:一个 BaaS(后端即服务),允许你在 Postgres 上创建数据表、定义权限并使用 GraphQL 接口查询和操作。

2.5K00

GraphQL

,为下一步查询返回做准备; 前端使用模式查询语言(Schema)来描述需要请求的数据对象类型和具体需要的字段(称之为声明式数据获取); 后端GraphQL通过前端传过来的请求,根据需要,自动组装数据字段...GraphQL应用基本架构 一个GraphQL服务仅暴露一个 GraphQL Endpoint,可以按照业务来进行区分,部署多个GraphQL服务,分管不同的业务数据,这样就可以避免单服务器压力过大的问题了...输入类型(Input Types):更新数据时有用,与常规对象只有关键字修饰不一样,常规对象时 type 修饰,输入类型是 input 修饰。...AWS AppSync:完全托管的 GraphQL 服务,包含实时订阅、离线编程和同步、企业级安全特性以及细粒度的授权控制。...Hasura:一个 BaaS(后端即服务),允许你在 Postgres 上创建数据表、定义权限并使用 GraphQL 接口查询和操作。

2.6K65

我为什么要放弃RESTful,选择拥抱GraphQL

,为下一步查询返回做准备; 前端使用模式查询语言(Schema)来描述需要请求的数据对象类型和具体需要的字段(称之为声明式数据获取); 后端GraphQL通过前端传过来的请求,根据需要,自动组装数据字段...GraphQL应用基本架构 一个GraphQL服务仅暴露一个 GraphQL Endpoint,可以按照业务来进行区分,部署多个GraphQL服务,分管不同的业务数据,这样就可以避免单服务器压力过大的问题了...输入类型(Input Types):更新数据时有用,与常规对象只有关键字修饰不一样,常规对象时 type 修饰,输入类型是 input 修饰。...AWS AppSync:完全托管的 GraphQL 服务,包含实时订阅、离线编程和同步、企业级安全特性以及细粒度的授权控制。...Hasura:一个 BaaS(后端即服务),允许你在 Postgres 上创建数据表、定义权限并使用 GraphQL 接口查询和操作。

2.3K40

解读GraphQL|洞见

并且与大多数查询语言不同的是,GraphQL是一个静态类型的查询语言,这意味着你可以通过GraphQL获得更强大更安全的开发体验。...而这个面板本身信息的来源,也只不过是GraphQL查询本身,这被Facebook称为自省(Introspection)。你可以打开Network,刷新页面查看GraphiQL是如何查询所有类型信息的。...2.安全问题 虽然GraphQL给客户端提供了强大的查询能力,但这也意味着有被客户端滥用的风险。...如果不使用某些限制过大的查询,反复请求一条Load出所有Github用户的查询可能会让他们的服务器直接挂掉,GraphQL提高了被DDoS的风险。...因此在使用GraphQL的过程中,我们要对安全问题更加重视。 3.需要重新思考Cache策略 REST虽然会引起一些性能问题,但它也HTTP Cache的方式解决了很多性能问题。

1.1K70

为什么我劝你放弃了Restful API?

创建GraphQL服务器的最终目标是: 允许查询通过图和节点的形式去获取数据。 GraphQL执行逻辑 有人会问: 使用GraphQL就要完全抛弃REST了吗?...一个GraphQL服务仅暴露一个 GraphQL Endpoint,可以按照业务来进行区分,部署多个GraphQL服务,分管不同的业务数据,这样就可以避免单服务器压力过大的问题了。...输入类型(Input Types):更新数据时有用,与常规对象只有关键字修饰不一样,常规对象时 type 修饰,输入类型是 input 修饰。...AWS AppSync:完全托管的 GraphQL 服务,包含实时订阅、离线编程和同步、企业级安全特性以及细粒度的授权控制。...Hasura:一个 BaaS(后端即服务),允许你在 Postgres 上创建数据表、定义权限并使用 GraphQL 接口查询和操作。

2.7K20

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

你必须一种非破坏性的方式引入此更改。了解下 Facebook 是如何避免破坏客户端的,这很有趣。 在 GraphQL 的情况下,模式演进意味着弃用一个旧字段,并添加一个新字段。...同样,使用像 Next.JS 这样的全栈框架更容易实现这一点,缓存也更容易,同时你还免费获得了基于 Etag 的缓存失效。 综上所述,GraphQL 准确提供了你所需的数据。...但是,GraphQL 模式是如何保证的呢? GraphQL 内省是向服务器发送一个特定的 GraphQL 查询获取关于 GraphQL 模式的信息。...GraphQL 服务器可以自由地使用它期望的任何类型进行响应。如果你发送一个查询,则服务器的响应可以不符合自省响应中的 GraphQL 模式。 Apollo Federation 为例。...当我们讨论 GraphQL 中的类型安全时,其实我们的意思是,我们相信 GraphQL 服务器的行为会与自省查询响应保持一致。为什么我们不能同样信任接口定义规范呢?我想我们可以。

2K10

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

你需要同时在服务器和客户端上实现每个端点 还有大量的库可以在 ORM 或直接数据库自省的帮助下自动生成 REST 端点。即使使用了这样的库,它们通常也不是很灵活或可扩展的。...服务器只需这种方式实现顶级模式对象。 一个简单的例子 GraphQL 模式定义了可用于在服务器和客户端之间通信的类型。...有两种特殊类型,它们同时也是 GraphQL 的核心概念:Query和Mutation。...如果使用一些现成的 GraphQL->数据库查询翻译库,你甚至不需要在服务器上编写大多数数据库查询。...在 Facebook 设计 GraphQL同时,我们也看到越来越多的大公司在他们的产品中使用它:GitHub、Shopify、Khan Academy、Coursera,而且 这个列表还在不断增长。

2.3K30

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

Apollo-link-state(现已直接放入 Apollo Client 2 和 3 中)让开发人员可以编写几乎同时解决远程状态和本地状态的查询。远程状态(位于服务器上)感觉比之前近多了。...,这些方法在被调用时会将操作转换为适当的 API 跨越数据图。...将用例作为应用程序的重心后,从 REST 切换到 GraphQL(或同时支持两者)变得轻而易举。...如果你认为自省(introspection)是全面的文档,那么可以说 GraphQL 是自文档化的,并且你的 API 文档无法失去同步。...由于具备执行自省查询的能力,所以 GraphQL Playground 的 GraphQL 资源管理器可以显示 GraphQL 端点的所有功能 在 REST 领域中,我只看到了使用 Swagger 构建的

2.1K20

API架构风格对比:SOAP vs REST vs GraphQL vs RPC

RPC与底层系统的强耦合使其无法在系统和外部API之间进行抽象,同时也增加了安全风险,很容易在API中泄露底层系统的实现细节。...可发现性低:RPC无法对API进行自省或无法通过发送的RPC请求来理解其调用的功能。...高度安全的数据传输:SOAP的刚性结构、安全和授权能力使其特别适用于在遵守API提供者和API使用者之间的契约的同时,在API和客户端之间履行正式的软件契约。...在到达后端应用后,会有一个GraphQL操作,负责使用前端应用的数据来解析整个模式。在给服务端发送包含大量查询的请求之后,API会返回一个JSON响应,内容正对应请求的资源。 ?...详细的错误消息:与SOAP类似,GraphQL提供了详细的错误信息,错误信息包括所有的解析器以及特定的查询错误。 灵活的权限:GraphQL允许在暴露特定的功能的同时保留隐私信息。

2.9K11

GraphQL 快速搭建服务端 API

这样既可以避免不同客户端取到冗余的、不需要的字段,又可以避免维护多个版本的 API 。...另外,只要谨慎选择 code 2.3 中 LnStarship.crew 这一关系的加载方式(如我们现在使用的 lazy='select'),就可以避免无谓的数据库查询。...个人经验是我会在开发过程中打开 SQLAlchemy engine 的 echo 属性,然后监控查询操作产生的每一句 SQL 语句,了解实际产生的语句是否合理、是否产生了额外的数据库查询等。...潜在的安全风险和隐私风险 GraphQL 提供的只是一套支持查询语句的 API ,而具体查询什么都是由客户端指定的。...一般解决方法是限制查询的深度以及数据获取大小,同时对请求的发起者要有必要的身份认证。

2.4K30

何为GraphQL

GraphQL是一种新型的,令人兴奋的,用于特定查询和操作的API。它非常灵活并且有很多好处。 它特别适合图形和树型为组织的数据。...这个方法避免了许多API终点的问题,但它违背了REST模型的理念。 你可以说GraphQL已将此方法用到了极致。它不是根据明确定义的资源来思考,而是根据整个资源领域的子图来进行思考。 ?...GraphQL类型系统 ? GraphQL使用一种由类型和属性组成的类型系统给领域建模。每一个属性都有一个类型。...我强烈推荐使用它来测试不同的查询。 ? 使用GraphQL的特别查询 ? 一切都设定好了。 让我们导航到http://localhost:3000/graphql并找点乐子。...模式自省 您可以检查和查询当前模式本身。 这会赋予您权力去动态地发现模式。

3.5K60
领券