当前位置: 首页 > 知识库问答 >
问题:

我可以使用graphQL客户端与同一应用程序中的graphQL服务器类通信吗?

史宸
2023-03-14

我目前正在创建POC。我们有一个连接到API网关的代理lambda。这个Lambda访问一些数据并返回胶片。这些项目非常大,因此我们希望让客户能够过滤他们从项目中获得的属性。我们希望使用graphql实现这一点。在本教程之后,我也在使用quarkus和java。https://quarkus.io/guides/smallrye-graphql

我在想,通过使用graphql,我可以生成如下资源

java prettyprint-override">@GraphQLApi
public class FilmResource {

    @Inject
    GalaxyService service;

    @Query("allFilms")
    @Description("Get all Films from a galaxy far far away")
    public List<Film> getAllFilms() {
        return service.getAllFilms();
    }

    @Query
    @Description("Get a Films from a galaxy far far away")
    public Film getFilm(@Name("filmId") int id) {
        return service.getFilm(id);
    }
}

aws代理lambda接受一种类型的APIGatewayProxyRequestEvent,它具有一个字符串体。我希望我能包装电影资源。java在graphql客户端中,并直接将APIGatewayProxyEvent的主体应用于电影资源。这看起来像这样

@Named("test")
public class TestLambda implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
    
    @Inject
    FilmResource resource;
    
    @Override
    public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent awsLambdaEvent, Context context) {
            DynamicGraphQLClient client = DynamicGraphQLClientBuilder.newBuilder().client(resource).build();
            JsonObject data = client.executeSync(awsLambdaEvent.getBody()).getData();
            return new APIGatewayProxyResponseEvent().withBody(data.toString()).withStatusCode(200);
    }
}

因此,理想情况下,客户能够将以下查询传递给lambda,它将收到正确的响应。

query allFilms {
  allFilms {
    title
    releaseDate
  }
}

但是,似乎所有客户端都只与远程图形化服务器一起工作。有没有可以包装内部图形化服务器类的客户端?来源:https://quarkus.io/guides/smallrye-graphql-client

共有1个答案

司马念
2023-03-14

没有办法让客户机在某种“本地”传输上运行,但即使目标在同一个JVM中,也应该能够使用HTTP传输。您只需要将客户端配置为在适当的URL上运行,可以是这样的

quarkus.smallrye-graphql-client.MY-CLIENT-KEY.url=http://127.0.0.1:${quarkus.http.port:8080}/graphql

并使用

@Inject
@GraphQLClient("MY-CLIENT-KEY")
DynamicGraphQLClient client;
 类似资料:
  • 我正在试用一个简单的示例。我能够运行服务器应用程序和客户端应用程序来彼此通信。我现在需要了解一个教程,说明两个客户机如何通过服务器相互通信。 我怎么能这么做?有人能给我指出一个好的教程或者解释如何在Java中实现这一点吗

  • 我需要一个用于java spring应用程序的graphQL客户端,以与另一个基于graphQL API的微服务通信。我知道Apollo Android,但它似乎没有用maven实现(也许你知道maven的一些链接或示例等)。有什么想法和建议吗?提前感谢!

  • 我有一个示例Spring启动应用程序来运行图形QL服务器,具有作为客户端,我的pom有以下依赖项: 当我尝试从客户端连接时,出现以下错误: 狩猎决议好心建议。 我还有几个问题: 我应该使用SimpleGraphQLHttpServlet将请求路由到endpoint吗 我正在React UI上使用apollo client,那么它是强制使用apollo server还是spring boot可以工作

  • 现在我的ServerSocket是这样的 一切正常,客户端连接,发送一些数据,服务器读取它,但我的问题是如何从我的服务器发送消息到所有的客户端?我目前保存客户端上的ArrayList,所以我可以只是循环,ArrayList打开一个作家和刷新它,但我想发送的数据,我得到我的ClientConnection类 我应该如何处理这个代码?在服务器类上完成的所有操作?或

  • 问题内容: 我正在构建一个小型聊天应用程序,其中客户端A希望通过服务器B将某些东西发送到客户端C。首先,这是解决问题的正确方法吗?我能够向服务器发送数据或从服务器接收数据,但仅限于客户端。例如,如果客户端A向服务器B发送数据而客户端C向服务器B发送数据,则我可以将数据发送回服务器A和C就像回显服务器一样。但是我想要的是将来自客户端A的数据通过服务器B转发到客户端C。 以下是服务器代码: 客户端代码

  • 我试图了解服务器-客户端网络如何为实时多人游戏工作。 假设我正在构建一个实时多人游戏,比如FPS。 如果玩家A向玩家B开枪,后端< code >服务器需要告诉玩家B他们被击中了。 我知道如何让玩家 A 告诉后端服务器他开了一枪,只是向服务器发送请求,但是如何让后端告诉玩家 他们被枪杀了? 玩家B是否必须每0.1秒检查一次后端以查看是否发生了什么事情,或者是否有更有效的方法?