java - GraphQL 客户端服务器连接
问题描述
我有一个示例 spring-boot 应用程序来运行 graphQL 服务器,graphiql-java
作为客户端,我的 pom 具有以下依赖项:
<dependencies>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-autoconfigure</artifactId>
<version>5.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.graphql-java/graphql-java-servlet -->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-servlet</artifactId>
<version>6.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>4.3.0</version>
</dependency>
</dependencies>
当我尝试从客户端连接时,出现以下错误:
狩猎决议好心建议。
我还有几个问题:
- 我应该使用
SimpleGraphQLHttpServlet
将请求路由到端点吗? - 我
apollo-client
在 React UI 上使用,所以它是强制使用apollo-server
还是 spring-boot 可以工作?spring-boot 方面的任何特定定制? - 如果我在 spring-boot 应用程序中有多个解析器,那么我该如何解析对特定解析器的请求?
解决方案
- 我应该使用 SimpleGraphQLHttpServlet 将请求路由到端点吗?
只有一个 GraphQL 端点,因此不需要路由请求。通常,您需要让服务器在 URL 上侦听 GraphQL 请求/graphQL
。这相当于以Servlet
标准 Java 方式实现了对这个 URL 的监听。如果您不想自己实现它,它SimpleGraphQLHttpServlet
就是这个 Servlet 实现之一。graphql-java-servlet
或者,graphql-java-spring
如果您使用的是 Spring。
- 我在 React UI 上使用 apollo-client,所以是否强制使用 apollo-server 或 spring-boot 可以工作?spring-boot 方面的任何特定定制?
假设您仅使用符合 GraphQL 规范的 GraphQL 功能,则apollo-client
应该适用于任何 GraphQL 服务器。apollo-server
因此,使用graphql-java
或任何语言实现服务器都没有关系。
- 如果我在 spring-boot 应用程序中有多个解析器,那么我如何解析对特定解析器的请求?
每个 GraphQL 类型中的每个字段都应该配置一个解析器来解析其值。每个 GraphQL 查询都将从根查询/变异/订阅类型的字段开始解析。在 中graphql-java
,您可以通过配置TypeRuntimeWiring
或配置使用哪个解析器类型的字段(有关更多详细信息,WiringFactory
请参阅此内容)。
推荐阅读
- javascript - 如何使用 Jquery 在输入文本框中验证允许减号(-)和仅数字?
- python - Python 非本地和全局如何协同工作?
- java - 即使使用前台服务,测距和监控也会在一段时间后停止
- php - Laravel snappy 文件未创建
- c - 使用联合计算 log2
- laravel - 如何在 Laravel 中搜索 MIN 和 MAX
- android - android sinch 后台音频和视频通话
- node.js - 使用聚合查询获取具有总交易计数和交易详细信息的用户列表作为嵌入文档
- javascript - 如何默认选择列表中的第一项
- python - 如何在 django 中对 Querylist 进行排序(rest api)