【问题标题】:How to format NewRelic NerdGraph API calls from java/groovy client?如何格式化来自 java/groovy 客户端的 NewRelic NerdGraph API 调用?
【发布时间】:2021-02-25 22:48:27
【问题描述】:

我正在尝试使用 NerdGraph API 从 NewRelic 中提取一些指标数据。它在使用 curl 时完美运行,但我在从 groovy/java 客户端调用它时遇到问题。 NerdGraph API 请求如下:

    {
      actor {
        entitySearch(query: "name like 'my-service-name'") {
          results {
            entities {
              tags {
                key
                values
              }
              guid
            }
          }
        }
      }
    }

以下 curl 调用工作正常:

curl --location --request POST 'https://api.newrelic.com/graphql' --header 'API-Key: MY-API-KEY' --header 'Content-Type: application/json' --data-raw '{"query":"{\n  actor {\n    entitySearch(query: \"name like '\''my-service-name'\''\") {\n      results {\n        entities {\n          tags {\n            key\n            values\n          }\n          guid\n        }\n      }\n    }\n  }\n}"}'

在我的 groovy 代码中,我尝试像这样实例化请求:

    String request = '''
{ "query":  "{
  actor {
    entitySearch(query: "name like 'my-service-name'") {
      results {
        entities {
          tags {
            key
            values
          }
          guid
        }
      }
    }
  }
}"
 }
'''

..或者这个:

    String request = '{"query":"{\n  actor {\n    entitySearch(query: \"name like \'my-service-name\'\") {\n      results {\n        entities {\n          tags {\n            key\n            values\n          }\n          guid\n        }\n      }\n    }\n  }\n}"}'

两者都不起作用。我收到https://api.newrelic.com/graphql -> 400:错误请求 我应该如何转义特殊字符(引号和双引号)以使其正常工作?

【问题讨论】:

    标签: graphql newrelic graphql-java


    【解决方案1】:

    我在 C# 中遇到了类似的问题,并来到这个问题寻找答案。希望您找到了解决方案,但对我来说,关键是将数据作为 byte[] 而不是字符串发送...

    using (var httpClient = new HttpClient())
    {
        using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.newrelic.com/graphql"))
        {
            string payload = @"{actor {account(id: NEWRELICACCOUNTID) {nrql(query: ""SELECT rate(count(*), 1 hour) AS 'RequestsPerHour' FROM Transaction TIMESERIES 1 hour FACET `Channel` EXTRAPOLATE SINCE 1 weeks ago"") {results}}}}";
            request.Headers.TryAddWithoutValidation("API-Key", "MYAPIKEY");
            request.Content = new ByteArrayContent(encoding.GetBytes(payload)); 
            var response = await httpClient.SendAsync(request);
        }
     }
    

    希望这对您或其他人有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2014-05-15
      • 2020-08-07
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      相关资源
      最近更新 更多