Как получить доступ к поиску в logz api с помощью appsync httpdatasource
Я пытаюсь получить доступ к своим журналам, хранящимся на logz.io, используя api-search, который мне предлагают.
На самом деле, я могу успешно получить доступ с помощью команды 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.
Однако когда я использую API-интерфейс AWS AppSync, используя источник данных HttpResolver с именем параметра:HttpDataSourceTest, тип:HTTP и конечная точка: https://api.logz.io/v1/search, я определил свой schema.grapqhl, шаблон запроса и ответа резольверы:
schema.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": "/"
}
Resolver шаблона ответа:
$utils.toJson({"TimeStamp":"$ctx.result.statusCode $ctx.result.body" })
После нескольких попыток и неудач я все упростил, просто запросил поле TimeStamp в запросе и показал статус, и все вернулось в ответ.
После всех этих конфигураций я получаю этот ответ:
{
"data": {
"GetLog": {
"TimeStamp": "403 {\"message\":\"Forbidden\"}"
}
}
}
Тот же самый результат, когда я пропускаю заголовок параметра X-API-TOKEN, он как HttpDatasource не отправляет эти параметры. Я новичок в использовании всех этих технологий, сервисов AWS и Logz.io. Пожалуйста, скажите мне, если я что-то пропускаю в каком-то месте.
1 ответ
Один источник данных 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"
}
}
}