0

我正在尝试使用他们提供给我的 api-search 访问存储在 logz.io 上的日志。

实际上,我可以使用 curl 命令成功访问,如下所示:

curl -X POST 'https://api.logz.io/v1/search'  
--header "X-API-TOKEN: API-TOKEN-GENERATED" 
--header "Content-Type: application/json" 
-d '{"query": {"term": {"_id": {"value": "Log Id Here"}}}}', 

就像https://github.com/logzio/public-api/tree/master/search说的。

但是,当我使用 AWS AppSync api 时,使用带有参数名称的 HttpResolver 数据源:HttpDataSourceTest,类型:HTTP 和端点:https : //api.logz.io/v1/search,我定义了我的 schema.grapqhl,请求和响应模板解析器:

架构.grapgql

type Query {
    GetLog(id: String): Log
} 

请求模板解析器:

{
    "version": "2018-05-29",
    "method": "POST",
    "params": {
        "headers": {
            "Content-Type: application/json",
            "X-API-TOKEN":"API-TOKEN-GENERATED"
        },
    "body":{
        "query": {
            "term": {
                "_id": {
                    "value": "$context.arguments.id"
                }
             }
         }
    }
    },
    "resourcePath": "/"
}  

响应模板解析器:

$utils.toJson({"TimeStamp":"$ctx.result.statusCode $ctx.result.body" })

经过几次尝试和失败后,我保持非常简单,只需在查询中询问 TimeStamp 字段并显示状态并全部返回作为响应。

在所有这些配置之后,我得到这个响应:

{
    "data": {
        "GetLog": {
            "TimeStamp": "403 {\"message\":\"Forbidden\"}"
        }
    }
}

当我跳过 X-API-TOKEN 参数标头时,结果相同,就像 HttpDatasource 不发送该参数一样。我是使用所有这些技术、AWS 服务和 Logz.io 的新手,如果我在某个地方遗漏了什么,请告诉我。

4

1 回答 1

0

我的许多解析器可以使用单个 http 数据源,并点击相对于同一根的不同路径。因此,当您设置 HTTP 数据源时,请将端点设置为https://api.logz.io,然后将其用于您的请求映射模板:

{
    "version": "2018-05-29",
    "method": "POST",
    ## E.G. if full path is https://api.xxxxxxxxx.com/posts then resourcePath would be /posts **
    "resourcePath": "/v1/search",
    "params":{
        "body":{
          "query": {
            "term": {
              "_id": {
                "value": "$context.arguments.id"
              }
            }
          }
        },
        "headers":{
            "Content-Type": "application/json",
            "X-API-TOKEN":"API-TOKEN-GENERATED"
        }
    }
}
于 2018-08-31T17:00:17.777 回答