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

通过Hasura中的配置将模式分支到本地解析器与远程解析器

基础概念

Hasura 是一个开源的 GraphQL 引擎,它允许开发者快速构建 GraphQL API,而无需编写大量的后端代码。Hasura 可以直接连接到数据库,并自动生成 GraphQL API,同时支持自定义解析器来处理复杂的业务逻辑。

模式分支 是指在 GraphQL 模式中定义不同的解析器路径,这些路径可以指向本地(即在 Hasura 实例内部定义的)解析器或远程(即在外部服务中定义的)解析器。

相关优势

  1. 灵活性:通过模式分支,可以将不同的业务逻辑分配到最适合处理它们的服务中,从而提高系统的整体性能和可维护性。
  2. 可扩展性:远程解析器允许开发者将部分功能外包给其他服务,这些服务可以独立扩展和维护。
  3. 解耦:本地和远程解析器的分离有助于实现前后端服务的解耦,使得系统更加模块化。

类型与应用场景

  • 本地解析器:适用于处理与数据库直接相关的操作,或者需要快速响应的业务逻辑。
  • 远程解析器:适用于复杂的业务逻辑,或者需要与其他服务集成的场景。

配置示例

假设我们有一个简单的 GraphQL 模式,其中包含用户查询:

代码语言:txt
复制
type Query {
  user(id: Int!): User
}

我们可以配置 Hasura,使得 user 查询根据某些条件分支到本地解析器或远程解析器。

本地解析器配置

在 Hasura 中,可以通过编辑模式文件来定义本地解析器:

代码语言:txt
复制
type Query {
  user(id: Int!): User @hasura(resolver: "local_resolver")
}

然后在 Hasura 的配置文件中指定 local_resolver 的具体实现:

代码语言:txt
复制
resolvers:
  local_resolver:
    type: "function"
    handler: "path/to/local/resolver.js"

远程解析器配置

对于远程解析器,可以使用 @remote 指令:

代码语言:txt
复制
type Query {
  user(id: Int!): User @remote(url: "https://api.example.com/user")
}

可能遇到的问题及解决方法

问题:远程解析器响应时间过长,影响整体性能。

原因:远程服务可能因为网络延迟或自身性能问题导致响应缓慢。

解决方法

  1. 优化远程服务:检查远程服务的性能瓶颈并进行优化。
  2. 设置超时时间:在 Hasura 中为远程解析器设置合理的超时时间,避免长时间等待。
  3. 使用缓存:对于不频繁变化的数据,可以在本地或中间层设置缓存,减少对远程服务的调用。

示例代码

代码语言:txt
复制
resolvers:
  remote_resolver:
    type: "remote"
    url: "https://api.example.com/user"
    timeout: 5s  # 设置超时时间为5秒

通过上述配置,可以有效管理 Hasura 中的模式分支,确保系统的高效运行和良好的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

受不了 Rust 这些问题,我将后端切换到了 Go

当需要一些比较复杂的逻辑时,它就不那么有效了——为此,Hasura 允许你将 GQL 请求映射到自定义 webhook。举例来说,我就是用这种方法进行 S3 文件上传或身份验证。...编写一个测试;意识到无法依赖注入。难过。 将结构转换为 trait;开心。 心满意足地依赖注入。 使用 mockall crate 自动生成 mock。非常非常开心! 做一个异步 http 调用。...需要用一个特殊的宏实现异步 trait。 意识到这个宏无法很好地与 Mockall 一起工作。 难过。 事后来看,这个问题是有办法解决的。...对我来说,要编排许多本地服务而又不用费事在每个服务(Hasura、Web 钩子、mock s3、mock oauth 服务器……)中运行 npm run ,最简单的方法是有一个 docker-compose.yaml...只在本地进行开发。然而,这有一个副作用,就是我的 Rust 代码需要在容器中编译,因为:必 须自动热重载。 必须在容器里开发。

66410

漫谈工厂模式

(json、xml、yaml、properties), * 选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser……), * 将存储在文件中的配置解析成内存对象...2.1 简单工厂实现方法 2.1.1 if分支 将代码中if-else逻辑判断创建对象的部分逻辑剥离出来,抽象成 createXX() 函数 将 createXX() 函数剥离到一个独立的类中,让这个类只负责对象的创建.../** * 简单工厂模式类 * * 将代码中涉及解析器 parser 创建的部分逻辑剥离出来,抽象成 createParser() 函数 * 将 createParser() 函数剥离到一个独立的类中...静态工厂方法模式不需要使用创建对象的方法来实例化对象,但也导致了其不能通过继承来改变创建方法的行为、 3. 工厂模式 利用多态替换简单工厂中的if分支逻辑是一种经典的工厂方法的实现。...其余解析类的和Json的相似。 // 在RuleConfigSource中的用法和工厂模式相似。 4.2 工厂模式与抽象工厂模式 所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合。

48810
  • 域名

    ---本地 DNS 服务器收到客户端的域名解析请求后,会采用递归查询方式(recursive query)或者迭代查询方式(iterative query)向 DNS 系统中的其他远程 DNS 服务器发送查询请求...如果浏览器中没有该域名的缓存,那么浏览器询问【本地 DNS 解析器】,【本地 DNS 解析器】首先查看本地 DNS 缓存。...如果本地 DNS 缓存中没有该域名的缓存,那么【本地 DNS 解析器】请求【本地 DNS 服务器】进行域名解析。...如果【本地 DNS 服务器】中没有该域名的缓存,那么【本地 DNS 服务器】向 DNS 系统中的其他远程 DNS 服务器发送查询请求。...将域名指向另外一个域名,指向的域名是规范名称。【本地 DNS 服务器】收到 CNAME 记录后,它会用 CNAME 记录中的规范名称来重新查询新域名的 A 记录。

    22.7K00

    Flink on Zeppelin 作业管理系统实践

    Zeppelin还支持在解析器/任务作用域的Flink运行时参数配置,集成hive catalog ,并支持简易的cron job执行,并对多版本Flink均提供了支持,最新的master分支支持了最新的...来提交作业,将Zeppelin集成到自己的系统里。...,超过一定数量时,等待释放资源提交; remote模式提交到hadoop yarn 中已经存在的job manager中,共享管理资源; yarn模式通过解析器新建flink cluster ; 作业提交后...实践要点 3.1 Python 环境及包管理 在运行pyflink过程中,需要提交将python依赖包安装到环境中,这里我们使用anaconda将python环境预先打包通过code build 存储到...S3存储中,在执行pyflink 之前,首先使用Shell解析器初始化python环境,通过配置Flink 解析中python的路径,访问安装好依赖的环境。

    2K20

    SpringCloudRPC远程调用核心原理:FeignRPC动态代理实例创建流程

    在应用启动的初始化过程中,Feign完成了以下两项工作: (1)对于每一个RPC远程调用Java接口,Feign根据@FeignClient注解生成本地JDK动态代理实例。...通过开发调试工具(如IDEA)在Feign.Builder的target(...)方法唯一的一行代码上设置一个断点,然后以调试模式启动uaa-provider服务,在工程启动的过程中可以看到断点所在的语句会被执行到...Contract远程调用协议规则类 在通过 ReflectiveFeign.newInstance()方法创建本地JDK Proxy实例时,首先需要调用方法解析器ParseHandlersByName的...在ParseHandlersByName.apply()方法中,需要通过Contract协议规则类将远程调用Feign接口中的所有方法配置和注解解析成一个List方法元数据列表...Contract协议规则类与方法解析器、调用处理器的关系如图3-23所示。

    83820

    什么是XXE漏洞,如何做好web安全

    XML解析器,用于分析XML文档,并执行其中的操作,XML解析器可以从本地文件系统或远程服务器加载外部实体。外部实体是DTD或XML实体,用于扩展XML元素。...这意味着在解析XML文档时,XML解析器可能会访问本地文件或网络上的远程文件。然而,XML在处理外部实体时存在安全风险。...攻击者可以将内部实体注入XML文档中,来执行恶意代码,例如读取本地文件系统的文件和执行控制台命令。外部实体这是XXE漏洞的主要风险点。...外部实体允许XML解析器从外部资源(如文件、数据库、其他URL等)加载数据,并将其插入到XML文档中,这样一来攻击者可以通过创建具有外部实体引用的XML文档来执行XXE漏洞。...3、沙箱技术将XML解析器运行在沙盒环境中,限制其访问系统资源的权限。这样即使攻击者成功利用了XXE漏洞,也无法对系统造成严重的损害,也可以限制发生XXE漏洞时,攻击者能够执行的操作的范围。

    20910

    激荡二十年:HTTP API 的变迁

    PHP 开发者可以把从处理用户的 HTTP 请求,连接 mysql,组装 SQL 进行查询,将查询结果转换成 HTML,一路到 HTML 响应返回给用户的整个业务逻辑放在一个(或者若干个)如意大利面条般的脚本中...2005-2010:从混沌到有序 — Ruby on Rails 横空出世 然而,成也萧何败也萧何,脱胎于 Web 开发的 PHP,与 Web 的亲和性是其优势,也是其后续没落的原因 —— 毕竟,当 Web...rails 是一个足以载入史册的框架:它把软件开发中的很多非常有益的概念、模式和思想(包括但不限于 ORM,CoC,MVC 等)糅合在自己体内,构建了一个强大同时非常易用的 web 开发系统。...另一个有着同样思路,但采取了不同路径的产品 Hasura,今年早些时候 C 轮融了一亿美金。与 supabase 背后的 postgREST 不同的是,Hasura 把宝押在了 GraphQL。...API 的 metadata 中包含了一些详尽的配置,以及 API 的参数如何作用到配置中。

    1.8K30

    Hive-数据仓库

    交互方式-用户接口:CLI(linux命令行)、WUI(hive web页面)、Client(连接远程服务HiveServer2,eg:JDBC、ODBC) Hive命令行模式: 1、进入bin 执行..../hiv 2、配置Hive环境变量,直接执行命令:hive --service cli 或 hive Hive的web模式: 执行hive -service hwi 启动后访问http://master...:9999/hwi Hive的远程服务: 默认端口:10000,执行启动命令:nobup hive --service hiveserver2 & 元数据存储:hive是将元数据存储在mysql或者Derby...等,元数据主要依赖MetastoreDB服务 hive数据模型包括表、外部表、分区、桶 解析器、编译器、优化器:完成HQL语法解析,由MapReduce执行 数据存储:存储在HDFS中 HiveQL:用于分析处理存储在...(create table xx as select xx from table) 数据导入:本地与HDFS导入、单表插入、多表插入 数据导出:导出数据到本地及HDFS HiveQL查询:兼容大部分sql

    67530

    注册中心 Eureka 源码解析 —— EndPoint 与 解析器

    概述 本文主要分享 EndPoint 与 解析器。 EndPoint ,服务端点。例如,Eureka-Server 的访问地址。...EndPoint 解析器,将配置的 Eureka-Server 的访问地址解析成 EndPoint 。...解析器 EndPoint 解析器使用委托设计模式实现。所以,上文图片中我们看到好多个解析器,实际代码非常非常非常清晰。 FROM 《委托模式》 委托模式是软件设计模式中的一项基本技巧。...在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。委托模式是一项基本技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。...注意,`ResolverUtils#randomize(…)` 使用以本机IP为随机种子,有如下好处: 第 10 至 12 行 :非可用区亲和,将非本地的可用区的 EndPoint 集群放在前面。

    1.5K00

    【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级

    但是,通过使用软件集合( collections ),可以在双拷贝方案中使用它。 如果启动了远程更新,SWUpdate将启动嵌入式web服务器并等待请求。...OTA / 远程 : - 集成的网络服务器 从远程服务器拉取(HTTP, HTTPS, ..) 使用后端。SWUpdate是开放的,可以与后端服务器进行通信,以推出软件更新。...sw-description的格式是可定制的:可以将SWUpdate配置为使用其内部解析器(基于libconfig),或者在调用外部的lua解析器。 ?...完全流式更新镜像 在远程更新的情况下,SWUpdate从流中提取相关图像,并将它们复制 到环境变量TMPDIR (如果未设置,则复制到 /tmp )指向的目录中,然后调用处理程序。...配置SWUpdate SWUpdate可以通过“make menuconfig”配置。使用内部解析器和禁用web服务器可以达到较小的内存占用。每个选项都有描述其用法的小帮助说明。

    4.3K11

    Hadoop数据分析平台实战——110Hive介绍和Hive环境搭建离线数据分析平台实战——110Hive介绍和Hive环境搭建

    元数据库主要是指定义在hive中的表结构信息,一般保存到关系型数据库中,默认是derby,一般使用mysql进行保存。 解析器主要功能是将HQL语句转换为mapreduce代码。...数据仓库就是由hdfs组成的数据存储容器。 Hive架构 ? image.png Hive安装 Hive根据metastore的存储位置不同,分为三种安装模式: 内嵌模式,本地模式,远程模式。...内嵌模式就是使用derdy存储元数据; 本地模式是将hvie.metastore.local设置为true,就是说metastore和hive客户端安装在同一台机器上; 远程模式指的是我们明确指定metastore...Hive远程模式安装,使用mysql进行元数据的存储。 安装步骤: 1. 安装mysql数据库。 2. hive本地模式安装。...修改/etc/my.cnf文件中的配置信息。 启动mysql 设置root用户密码 root用户登录 创建hive元数据的mysql用户并授权。

    1K80

    Java EE之SSM框架整合开发 -- (9) Spring MVC入门

    9.1 MVC模式与Spring MVC工作原理 MVC思想将整个应用分成3个基本部分,即Model模型、View视图、Controller控制器。...控制器:根据视图提出的请求判断将请求和数据交给哪个模型处理,将处理后的有关结果交给哪个视图更新显示。 下图是基于Servlet的MVC模式的流程图: ?...寻找一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图; 6.视图负责将结果显示到客户端。...View接口的主要作用是用于处理视图,然后返回给客户端。 SpringMVC视图解析器解析流程: 1、将SpringMVC控制器中的返回结果封装成一个ModelAndView对象。...2、通过SpringMVC中的视图解析器,使用ViewResolver对控制器返回的ModelAndView对象进行解析,将逻辑视图转换成物理视图。

    97950

    详细讲解浏览器如何向DNS服务器查询Web服务器的IP地址

    通过解析器向DNS服务器发出查询浏览器内部使用解析器(resolver)来处理域名解析的请求。解析器是位于操作系统或应用程序中的一个组件,它负责将域名转换为IP地址。...解析器首先检查本地缓存,如果找到了域名的IP地址,则直接返回结果给浏览器。如果没有找到缓存记录,解析器会向配置的DNS服务器发送查询请求。...通常情况下,操作系统会预先配置一个默认的DNS服务器,也可以手动设置。解析器使用Socket库提供的API,创建一个Socket连接并发送UDP或TCP数据包到DNS服务器的53端口。...解析器接收到响应数据包后,会解析其中的IP地址并存储到本地缓存中。解析器将解析结果返回给浏览器,浏览器将结果用于后续网络连接。...通过以上步骤,浏览器能够通过解析器向DNS服务器查询Web服务器的IP地址,并在收到响应后将其用于与服务器建立网络连接。

    57031

    【干货】华为路由器怎么配置DNS?一篇文章让你明明白白!

    TCP/IP提供了通过IP地址来连接到设备的功能,但对用户来讲,记住某台设备的IP地址是相当困难的,因此专门设计了一种字符串形式的主机命名机制,这些主机名与IP地址相对应。...IPv4静态域名解析是通过静态域名解析表进行的,即手动建立域名和IPv4地址之间的对应关系表,该表的作用类似于Windows 9X操作系统下的hosts文件,可以将一些常用的域名放入表中。...1.用户使用域名访问某些应用服务时,用户程序(如ping、telnet等)首先向DNS Client的地址解析器发出DNS请求。 2.地址解析器收到DNS请求后,首先查询本地域名缓存。...•如果本地域名缓存中存在该域名对应的映射表项,地址解析器就直接将域名对应的IP地址返回给用户程序。 •如果本地域名缓存中不存在所要查找的映射表项,地址解析器就向DNS Server发送查询请求报文。...4.DNS Client的地址解析器接收并解析DNS Server发回来的响应报文,将解析结果返回给用户程序。

    4.2K40

    为什么建议没事不要随便用工厂模式创建对象?

    在下面这段代码中,我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser……),将存储在文件中的配置解析成内存对象...重构之后的代码如下所示: 为了让类的职责更加单一、代码更加清晰,我们还可以进一步将 createParser() 函数剥离到一个独立的类中,让这个类只负责对象的创建。...当我们需要添加新的规则配置解析器的时候,我们只需要创建新的 parser 类和 parser factory 类,并且在 RuleConfigParserFactoryMap 类中,将新的 parser...比如,在规则配置解析那个例子中,解析器类只会根据配置文件格式(Json、Xml、Yaml……)来分类。...当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类,我推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。

    57040

    V8 有了全新的超快速非优化 JS 编译器,性能提高 5-15%

    基于我们目前的双编译器模式,我们很难更快地升级(tier-up)到优化代码;我们可以(并且正在)提升优化的效果,但在某些时候,想要提升速度就只能去掉一些优化项,但这会降低峰值性能。...相反,Sparkplug 通过字节码的一次线性 pass 直接编译为机器码,并发出与该字节码的执行相匹配的代码。...来存储解析器的当前状态——其中包括 JavaScript 函数的本地变量(var/let/const 声明)和临时值。...这些寄存器与要执行的字节码数组指针,以及该数组中当前字节码的偏移量一起存储在解析器的堆栈框架中: V8 解析器堆栈框架 Sparkplug 会有意创建并维护一个与解析器的框架相匹配的框架布局;只要解析器存储一个寄存器值...分派到下一个字节码需要成功的分支预测才能保持高性能,即使推测和预测正确,你还是要执行所有解码和分派代码,并且你还是会在各个缓冲区和缓存中浪费宝贵的空间。

    77110

    为什么建议没事不要随便用工厂模式创建对象?

    在下面这段代码中,我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser……),将存储在文件中的配置解析成内存对象...重构之后的代码如下所示: ? 为了让类的职责更加单一、代码更加清晰,我们还可以进一步将 createParser() 函数剥离到一个独立的类中,让这个类只负责对象的创建。...当我们需要添加新的规则配置解析器的时候,我们只需要创建新的 parser 类和 parser factory 类,并且在 RuleConfigParserFactoryMap 类中,将新的 parser...比如,在规则配置解析那个例子中,解析器类只会根据配置文件格式(Json、Xml、Yaml……)来分类。...当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类,我推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。

    60550

    浅谈XXE攻击

    有些XML文档包含system标识符定义的“实体”,这些XML文档会在DOCTYPE头部标签中呈现。这些定义的’实体’能够访问本地或者远程的内容。比如,下面的XML文档样例就包含了XML ‘实体’。...关键字’SYSTEM’会告诉XML解析器,’entityex’实体的值将从其后的URI中读取。因此,XML实体被使用的次数越多,越有帮助。...因此,攻击者可以通过实体将他自定义的值发送给应用程序,然后让应用程序去呈现。 简单来说,攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件)。...观察上面的请求与响应,我们可以看到,应用程序正在解析XML内容,接受特定的输入,然后将其呈现给用户。...因此,最好的解决办法就是配置XML处理器去使用本地静态的DTD,不允许XML中含有任何自己声明的DTD。 比如下面的Java代码,通过设置相应的属性值为false,XML外部实体攻击就能够被阻止。

    86560

    快速学习-SpringMVC概述

    1.3 SpringMVC能干什么 天生与Spring框架集成,如:(IOC,AOP) 支持Restful风格 进行更简洁的Web层开发 支持灵活的URL到页面控制器的映射 非常容易与其他视图技术集成,...,不必实现特定框架的API 更加简单、强大的异常处理 对静态资源的支持 支持灵活的本地化、主题等解析 1.4 SpringMVC怎么玩 将Web层进行了职责解耦,基于请求-响应模型 常用主要组件 ①...把逻辑视图解析为具体的View,进行这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为JSP视图 ⑤ LocalResolver:本地化...返回值会通过视图解析器解析为实际的物理视图, 对于 InternalResourceViewResolver 视图解析器, * 会做如下的解析: * 通过 prefix...查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图 ⑥ 视图负责将结果显示到客户端

    79120

    利用XML和ZIP格式解析漏洞实现RCE

    目标Web应用情况 在参与某个众测项目过程中我遇到了一个Web应用,它可以执行某种通用文件类型的处理,这里我们暂且把该种文件类型称为.xyz吧,通过Google查找,我发现这种.xyz文件类型其实就是包含了...但是,如果其中的XML解析器配置不当,可以让用户自行声明定义外部实体输入,那么,严重攻击者就能从当前服务端的本地或内部获取敏感数据,或执行恶意操作。...采用了XML库的JAVA应用通常存在默认的XML解析配置,因此容易受到XXE攻击。为了安全的使用此类解析器,可以在一些解析机制中禁用XXE功能。...XXE Payload相关的非系统外部实体、本地文件、远程文件我们都需要一一尝试才能证明XXE漏洞是否存在。...我要确定的是把目录遍历Payload放到本地文件系统中的具体位置,好在XXE漏洞在此可以帮上忙了,外部实体对本地文件的读取不仅限于文件,还可以读取目录。

    1.4K10
    领券