Как передать тип запроса в лямбду из шлюза API? - PullRequest
0 голосов
/ 17 марта 2019

У меня сейчас лямбда, работающая с API-шлюзом. но это просто жестко, чтобы получить данные. Я хочу опубликовать некоторые данные через шлюз и лямбда в RDS. Я хочу сделать это в той же лямбде и использовать некоторые условные блоки или оператор switch внутри него.

Есть ли способ сообщить лямбде, какой тип запроса (GET / POST и т. Д.), А затем полезную нагрузку с ним, чтобы лямбда правильно направляла и выполняла только эту конкретную часть функции?

что-то вроде:

    exports.handler = (event, context, callback) => {
        context.callbackWaitsForEmptyEventLoop = false
        pool.getConnection(function(err, connection) {
          if (err) callback(err)

          if (request === GET && payload === exercises) {
             connection.query('SELECT * FROM exercises', function (error, results, fields) {
          } else if (request === POST && payload === workouts){
         // do some INSERT INTO sql statement
}


            connection.release();

            if (error) callback(error)
            else callback(null, results)

          });
        })
    }

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Это определенно возможно при интеграции лямбда-прокси , когда вы подключаете каждый метод ресурсов с одной и той же лямбдой:

exports.handler = async (event) => {
    if ('POST' === event.httpMethod) {
        ...
    }
    if ('GET' === event.httpMethod) {
        ...
    }
}

И это, вероятно, хорошо для начала, когда вы неУ меня пока нет достаточных знаний о том, как разделить ваш домен на функции (иногда называемые nanoservices , как строительные блоки микросервисов), но в целом это считается плохим дизайном из-за ремонтопригодности - ваш сервис тоже делаетмного, и код становится слишком условным и, следовательно, сложным.

Вы можете начать с одной лямбды и после того, как границы домена найдены, разделить логику на отдельные компоненты, по одному на ресурс API, по его ответственности.

0 голосов
/ 17 марта 2019

Это кажется плохой идеей для начала. Вам необходимо прикрепить лямбда-функцию к определенному ресурсу в вашем API-шлюзе (метод POST, GET). Когда GET-запрос приходит к вашему API-шлюзу, API-шлюз выполняет лямбда-функцию, связанную с этим конкретным ресурсом, и то же самое относится и к POST-запросу. Поэтому вам не нужно обрабатывать маршрутизацию внутри вашей лямбда-функции, так как она обрабатывается API-шлюзом. Вам просто нужно прикрепить правильную лямбда-функцию к правильному ресурсу в вашем API-шлюзе.

Единственная причина, по которой вам могут понадобиться такие функции, заключается в том, что вы пытаетесь присоединить одну и ту же лямбда-функцию к нескольким ресурсам, что является плохой идеей по нескольким причинам. Такая функция будет более сложной, чем необходимо (сложнее в обслуживании и отладке), а также будет работать дольше (хотя, вероятно, не намного в этом случае), что приведет к увеличению затрат.

Таким образом, решение состоит в том, чтобы просто создать одну функцию, которая будет обрабатывать запрос GET, и функцию, которая будет обрабатывать запрос POST.

Учитывая полезную нагрузку, вы можете получить к ней доступ через параметр event.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...