我正在尝试使用他们提供给我的 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 的新手,如果我在某个地方遗漏了什么,请告诉我。