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

时间:2018-03-16 18:18:47

标签: java github graphql github-api

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

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

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

1 个答案:

答案 0 :(得分:0)

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

例如:

以下graphQL查询...

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

...将生成以下Java代码段...

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字符串。这是一个简单又肮脏的解决方案,有很多改进的余地,我目前也在探索。在开发更强大的解决方案时,我将重新讨论这一点。