Как получить доступ к поиску в 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"
        }
    }
}
Другие вопросы по тегам