Не удается заставить AWS API Gateway переопределить коды ответов - проверка конечной точки FitBit

Я интегрирую FitBit с платформой моей компании, и мы переходим от синхронизации с нашим собственным сервером к отправке данных в поток AWS Kinesis. Это требует, чтобы мы также настроили AWS API Gateway с методом POST для записи данных в поток. Я также установил метод GET на том же ресурсе для процесса проверки.

Вот проблема, с которой я столкнулся:

После того, как я правильно настроил конечную точку API, FitBit предоставляет код проверки и требует процесса проверки, в котором он отправляет запрос GET на конечную точку с параметром запроса? Verify = {correificaitonCode} и хочет получить ответ 204 и один с ? verify = {invalidVericationCode} параметр и хочет получить ответ 404. Мне, очевидно, было бы легко сделать это в нашем бэкэнде Rails, где я контролирую код, но на AWS это запутанный беспорядок с небольшим контролем.

Я прочитал бесконечную документацию по AWS о шаблонах сопоставления и интеграционном ответе, но что бы я ни делал, я не могу заставить API отвечать чем-либо, кроме 200 (когда запрос чистый и имеет какой-либо параметр? Verify) или 500 ( когда я намеренно делаю плохой запрос). В документации AWS по этому поводу нет однозначного ответа.

Я ближе всего подошел к настройке, которая, как обещают документы, должна работать, но это не так: Использование регулярного выражения статуса HTTP для ответа интеграции

И с этим шаблоном сопоставления

Я уже два дня занимаюсь этим и до смерти расстроен. Помощь!


person Mike Maven    schedule 17.10.2019    source источник


Ответы (1)


На всякий случай, если кто-нибудь найдет эту ветку в будущем и будет бороться с той же проблемой - вот как вы проверяете приложение FitBit Developer API с потоком Amazon Kinesis, подаваемым через AWS API Gateway:

Сначала настройте метод POST вашего API - для этого есть руководства AWS. Выберите сервис AWS в качестве типа интеграции и kinesis в качестве сервиса, затем настройте шаблон сопоставления для application / json, который будет выглядеть следующим образом:

#set($event = $input.body)
#set($data = '{"action":' + $event +', "authorization": "' + $input.params('Authorization') + '", "stage":"' + $context.stage + '"}')
#set($body = $util.base64Encode($data))
{
   "Data": "$body",
   "PartitionKey": "shard-1",
   "StreamName": "gm-fitbit"
}

Как только вы это сделаете, создайте метод GET на том же ресурсе. Установите MOCK в качестве типа интеграции и создайте конечную точку. Теперь щелкните метод GET и перейдите в раздел «Запрос метода». Разверните Параметры строки запроса URL и добавьте verify в качестве параметра запроса. Теперь вернитесь к методу и посетите Integration Response.

В рамках уже существующего метода ответа 200 разверните его и добавьте регулярное выражение состояния HTTP 2\d{2} и сквозную обработку.

Разверните шаблоны сопоставления и для 'application / json' создайте этот шаблон сопоставления:

{
  #if( $input.params('verify') == "theVerificationCodeProvidedToYouByFitbit" )
    #set($context.responseOverride.status = 204)
  #else
    #set($context.responseOverride.status = 404)
  #end
}

Вот и все! Снова разверните API, вернитесь на Fitbit и нажмите «Подтвердить»!

Там. Теперь есть официальное онлайн-руководство по интеграции Fitbit с потоком AWS Kinesis, которое я хотел бы иметь, когда боролся с этим в течение 3 дней.

Ваше здоровье!

person Mike Maven    schedule 18.10.2019