Graphql 如何格式化来自java/groovy客户端的NewRelic NerdGraph API调用?

Graphql 如何格式化来自java/groovy客户端的NewRelic NerdGraph API调用?,graphql,newrelic,graphql-java,Graphql,Newrelic,Graphql Java,我试图使用NerdGraph API从NewRelic中提取一些度量数据。它在使用curl时工作得很好,但是我在从groovy/java客户机调用它时遇到了问题。 NerdGraph API请求如下: { actor { entitySearch(query: "name like 'my-service-name'") { results { entities { t

我试图使用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}"}'

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

我在C#中遇到了类似的问题,并开始寻找答案。希望您已经找到了解决方案,但对我来说,关键是以字节[]而不是字符串的形式发送数据

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);
    }
 }
希望这对你或其他人有帮助