GitHub 的 GraphQL API 如何从 Java 中使用?

Posted

技术标签:

【中文标题】GitHub 的 GraphQL API 如何从 Java 中使用?【英文标题】:How can GitHub's GraphQL API can be consumed from Java? 【发布时间】:2018-08-25 21:42:58 【问题描述】:

我想从 Java 中使用 GitHub 的 GraphQL API,但经过大量搜索后,我无法找到一个库或其他解决方案让我以一种易于使用的方式做到这一点。

官方文档也没有详细说明如何做到这一点。

如何使用 GitHub 的 v4 API?我想根据 API 本身生成代码,以便以编程方式使用它。

【问题讨论】:

这是一个相当广泛的问题。你有什么问题? GraphQL 本身?请阅读How to Ask。 我认为这是一个非常具体的问题。我想使用带有代码生成的 Java 来使用 GitHub 的 v4 API。这怎么能更具体? “我找不到图书馆……这让我可以轻松地做到这一点。”我确信 GraphQL 库是为 Java 存在的。您是否正在专门寻找 GitHub-via-GraphQL 库? (请注意,在这里要求我们查找或推荐非现场资源是题外话。)“官方文档也没有详细说明如何做到这一点。”你需要 GraphQL 教程吗?这些网上有很多。 “如何使用 GitHub 的 v4 API?”通过对记录的端点使用 GraphQL。同样,教程可能会有所帮助。请阅读help center 和How to Ask 中的主题内容。 我已阅读所有教程和文档。我创建了自己的 GraphQL API 作为练习,但没有关于如何使用 GraphQL API 的信息。 “通过对记录的端点使用 GraphQL。” 根据您的 cmets,我认为您的问题可以简化。忘记 GitHub 及其 API:您的问题似乎是,“如何在 Java 中有效地构建 GraphQL 查询?” (据我所知,GraphQL 本身可以使用任何 HTTP 客户端进行查询:挑战在于有效地构建查询字符串。)不幸的是,我不知道这个问题的答案。 【参考方案1】:

我建议您尝试开源 Insomnia。它使您能够从 GraphQL 查询中自动生成 Java 代码以供 OkHttp 库使用。

例如:

以下 graphQL 查询...

query GetIssues($client: String!
                             ) 
  organization(login: $client) 
    name
    repositories(last: 10) 
      edges 
        cursor
        node 
          name
          url
          description
        
      
    
  

...会生成如下Java sn-p...

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/graphql");
RequestBody body = RequestBody.create(mediaType, "\"query\":\"query GetIssues($client: String!) \\n  organization(login: $client) \\n    name\\n    repositories(last: 10) \\n      edges \\n        cursor\\n        node \\n          name\\n          url\\n          description\\n        \\n      \\n    \\n  \\n\\n\",\"variables\":\"client\":\"AniTrend\",\"operationName\":\"GetIssues\"");
Request request = new Request.Builder()
  .url("https://api.github.com/graphql")
  .post(body)
  .addHeader("authorization", "Bearer YOU_BEARER_AUTH_HERE")
  .build();

Response response = client.newCall(request).execute();

然后,如果您在查询中使用您对 GraphQL 变量的了解并将其与您对 Java 变量的了解相匹配,那么您应该能够修改 RequestBody 字符串。这是一个简单而肮脏的解决方案,有很大的改进空间,我目前也在探索。我会在开发更强大的解决方案时重新审视这一点。

【讨论】:

谢谢你拯救了我的一天。

以上是关于GitHub 的 GraphQL API 如何从 Java 中使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何从java访问github graphql API而不在java中运行curl命令

GitHub API v4:如何使用分页进行遍历? (GraphQL)

如何将 Github API v4 (graphql) 与 javascript XMLHttpRequest 一起使用

Github GraphQL API:如何收集特定用户的存储库?

如何批处理 GitHub GraphQL API 查询?

如何使用 HttpUrlConnect 使用 java 查询 Github graphql API