Как получить доступ к logz api search с помощью appsync httpdatasource - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь получить доступ к моим журналам, хранящимся на 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": "/"
}  

Резолвер шаблона ответа:

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

После нескольких попыток и неудач я все упростил, просто запросите поле TimeStamp в запросе и покажите статус, и все вернулось в ответ.

После всех этих конфигураций я получаю такой ответ:

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

Тот же результат, когда я пропускаю заголовок параметра X-API-TOKEN, он как HttpDatasource не отправляет эти параметры. Я новичок в использовании всех этих технологий, сервисов AWS и Logz.io, пожалуйста, скажите мне, если я что-то пропускаю в каком-то месте.

1 Ответ

0 голосов
/ 31 августа 2018

Один источник данных 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"
        }
    }
}
...