首页 > 解决方案 > 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>

当我尝试从客户端连接时,出现以下错误:

在此处输入图像描述

狩猎决议好心建议。

我还有几个问题:

  1. 我应该使用SimpleGraphQLHttpServlet将请求路由到端点吗?
  2. apollo-client在 React UI 上使用,所以它是强制使用apollo-server还是 spring-boot 可以工作?spring-boot 方面的任何特定定制?
  3. 如果我在 spring-boot 应用程序中有多个解析器,那么我该如何解析对特定解析器的请求?

标签: javagraphql-java

解决方案


  1. 我应该使用 SimpleGraphQLHttpServlet 将请求路由到端点吗?

只有一个 GraphQL 端点,因此不需要路由请求。通常,您需要让服务器在 URL 上侦听 GraphQL 请求/graphQL。这相当于以Servlet标准 Java 方式实现了对这个 URL 的监听。如果您不想自己实现它,它SimpleGraphQLHttpServlet就是这个 Servlet 实现之一。graphql-java-servlet或者,graphql-java-spring如果您使用的是 Spring。

  1. 我在 React UI 上使用 apollo-client,所以是否强制使用 apollo-server 或 spring-boot 可以工作?spring-boot 方面的任何特定定制?

假设您仅使用符合 GraphQL 规范的 GraphQL 功能,则apollo-client应该适用于任何 GraphQL 服务器。apollo-server因此,使用graphql-java或任何语言实现服务器都没有关系。

  1. 如果我在 spring-boot 应用程序中有多个解析器,那么我如何解析对特定解析器的请求?

每个 GraphQL 类型中的每个字段都应该配置一个解析器来解析其值。每个 GraphQL 查询都将从根查询/变异/订阅类型的字段开始解析。在 中graphql-java,您可以通过配置TypeRuntimeWiring或配置使用哪个解析器类型的字段(有关更多详细信息,WiringFactory请参阅此内容)。


推荐阅读