Получение тела запроса в виде строки из шлюза API с ожиданием содержимого JSON - PullRequest
0 голосов
/ 26 февраля 2019

Я недавно начал создавать командного бота slack slash для целей обучения.Я получаю другой формат тела запроса от API-шлюза и приложения nodejs на сервере EC2.Я просто хочу получить JSON-формат тела запроса от шлюза API.Как можно получить это?

Давайте посмотрим как формат тела, так и файл serverless.yml.

Сначала я установил инфраструктуру без сервера и создал файл serverless.yml со следующим кодом

service: as-serverless-slack-bot 
# NOTE: update this with your service name

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

provider:
  name: aws
  runtime: nodejs8.10

 functions:
 info:
    handler: handler.info
    events:
      - http:
          method: post
          path: slack/info
          cors: true

Теперь я успешно развернул его.Однако когда я выполняю команду slack slash, я получаю тело запроса в строковом формате от шлюза API,

body: 'token=XXXXXX&team_id=XXXXXXXX&team_domain=XXXXXXX&channel_id=XXXXXXX&channel_name=XXXXXX&user_id=XXXXXX&user_name=XXXXXXX&command=%2Finfo&text=about+users&response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2XXXXXXX%2XXXXXXXXXXX&trigger_id=562173962614.55XXXXXXXXX.326e28e8599XXXcacf0XXXXXa'

Хотя для того же действия я получаю тело запроса в формате JSON в приложении EC2 nodejs.

{
  "body": {
    "token": "xxxxxxxxx",
    "team_id": "xxxxxx",
    "team_domain": "xxxxxx",
    "channel_id": "xxxx",
    "channel_name": "xxxx",
    "user_id": "xxx",
    "user_name": "xx",
    "command": "/info",
    "text": "about users",
    "response_url": "https://hooks.slack.com/commands/x/x/x",
    "trigger_id": "560161450593.558xxxxxxxx3.3741c456xxxxx05cc6xxx62"
  }
}

Итак, как я могу получить тело запроса в формате JSON от шлюза API?

1 Ответ

0 голосов
/ 27 февраля 2019

Это правильно.По умолчанию лямбда-интеграция осуществляется через «лямбда-прокси», который обходит преобразователи запросов / ответов API-шлюза.По сути, вы получаете необработанные полезные данные.

Если вы хотите, чтобы API-шлюз выполнял часть работы, вам нужно переключить интеграцию на lambda и настроить API-шлюз на прием application/json в качестве типа запроса..

https://serverless.com/framework/docs/providers/aws/events/apigateway#lambda-integration

...