
java调用skywalking 的 graphql
典型的 REST API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。向你的 API 发出一个 GraphQL 请求就能准确获得你想要的数据,不多不
GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。
向你的 API 发出一个 GraphQL 请求就能准确获得你想要的数据,不多不少。 GraphQL 查询总是返回可预测的结果。使用 GraphQL 的应用可以工作得又快又稳,因为控制数据的是应用,而不是服务器。
GraphQL 查询不仅能够获得资源的属性,还能沿着资源间引用进一步查询。典型的 REST API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据。这样一来,即使是比较慢的移动网络连接下,使用 GraphQL 的应用也能表现得足够迅速。
GraphQL API 基于类型和字段的方式进行组织,而非入口端点。你可以通过一个单一入口端点得到你所有的数据能力。GraphQL 使用类型来保证应用只请求可能的数据,还提供了清晰的辅助性错误信息。应用可以使用类型,而避免编写手动解析代码。
本文将介绍使用java调用skywalking的graphql api
skywalking 的 graphql 调用
1.skywalking查询文档:https://github.com/apache/skywalking-query-protocol
以trace.graphqls文档为例
可以在最底部看到可以外部调用的查询方法
extend type Query {
# Search segment list with given conditions
queryBasicTraces(condition: TraceQueryCondition): TraceBrief
# Read the specific trace ID with given trace ID
queryTrace(traceId: ID!): Trace
# Read the list of searchable keys
queryTraceTagAutocompleteKeys(duration: Duration!):[String!]
# Search the available value options of the given key.
queryTraceTagAutocompleteValues(tagKey: String! , duration: Duration!):[String!]
}
以queryBasicTraces(condition: TraceQueryCondition): TraceBrief为例
括号中condition: TraceQueryCondition代表查询参数,冒号后TraceBrief为返回的结果对象
在文档中搜索input TraceQueryCondition可以查看查询参数TraceQueryCondition对象的参数
input TraceQueryCondition {
# The value of 0 means all services.
serviceId: ID
serviceInstanceId: ID
traceId: String
endpointId: ID
# The time range of traces started
queryDuration: Duration
# The min time of trace
minTraceDuration: Int
# The max time of trace
maxTraceDuration: Int
traceState: TraceState!
queryOrder: QueryOrder!
# Map to the tags included in the traces
tags: [SpanTag!]
paging: Pagination!
}
在文档中搜索type TraceBrief可以查看返回结果TraceBrief对象的参数
type TraceBrief {
traces: [BasicTrace!]!
}
可以看到,返回结果traces是一个数组,再查询BasicTrace对象的参数
type BasicTrace {
segmentId: String!
endpointNames: [String!]!
duration: Int!
start: String!
isError: Boolean
traceIds: [String!]!
}
调用:
1.导入依赖
<dependency>
<groupId>org.mountcloud</groupId>
<artifactId>graphql-client</artifactId>
<version>1.2</version>
</dependency>
2.创建graphqlClient对象
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient(graphqlUrl);
3.查询体
GraphqlClient graphqlClient = GraphqlClient.buildGraphqlClient("http://10.230.1.71:9090/graphql");
GraphqlQuery queryBasicTraces = new DefaultGraphqlQuery("queryBasicTraces");
JSONObject condition = new JSONObject();
JSONObject queryDuration = new JSONObject();
queryDuration.put("start", "2023-05-16 1550");
queryDuration.put("end", "2023-05-16 1650");
queryDuration.put("step", Step.MINUTE);
condition.put("queryDuration", queryDuration);
condition.put("traceState", TraceState.ALL);
condition.put("queryOrder", QueryOrder.BY_DURATION);
condition.put("paging", JSON.parse("{\"pageNum\": 1,\"pageSize\": 100}"));
condition.put("serviceId", "serviceId"); //serviceId
condition.put("minTraceDuration", null);
condition.put("maxTraceDuration", null);
queryBasicTraces.getRequestParameter().addObjectParameter("condition", condition);
4.返回体
ResultAttributtes resultAttributtes = new ResultAttributtes("traces");
resultAttributtes.addResultAttributes("segmentId", "endpointNames", "duration", "traceIds");
queryBasicTraces.addResultAttributes(resultAttributtes);
5.调用查询
GraphqlResponse graphqlResponse = graphqlClient.doQuery(queryBasicTraces);
JSONObject response = new JSONObject(graphqlResponse.getData());
更多推荐
所有评论(0)