получить элемент по идентификатору API getway AWS - PullRequest
0 голосов
/ 25 марта 2019

Я новичок в AWS и только что создал API.Я хочу иметь возможность получить все элементы в БД и получить один элемент.

Сейчас мой http-запрос на получение ВСЕХ элементов выглядит следующим образом:

https://xxxx.amazonaws.com/test/

Я хочу получить что-то вроде этого:

  https://xxxx.amazonaws.com/test/123

Где 123 - это значение столбца с именем RACF в моей базе данных DynamoDB.

Моя лямбда-функция выглядит следующим образом:

   .
   .
   .
    exports.handler = (event, context, callback) => {
        console.log('Received event:', JSON.stringify(event, null, 2));
        const tableName = 'test';

        const done = (err, res) => callback(null, {
            statusCode: err ? '400' : '200',
            body: err ? err.message : JSON.stringify(res),
            headers: {
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': '*'
            },
        });

        switch (event.httpMethod) {
            .
            .
            case 'GET':
                dynamo.scan({ TableName: tableName }, done);
                break;
           .
           .
           default:
                done(new Error(`Unsupported method "${event.httpMethod}"`));
        }
    };

Я прочитал, я должен использовать.dynamo.getItem().но я не уверен, как реализовать это с GET

ПРИМЕЧАНИЕ: я не использую командную строку.Я использую консоль AWS на их веб-сайте с приятным интерфейсом.

ПОЛУЧИТЬ КОНФИГУРАЦИЮ: enter image description here

1 Ответ

1 голос
/ 25 марта 2019

Вам нужно добавить новый ресурс в AWS API Getway, поэтому вам нужно создать /test/{item_id} путь, после чего вам нужно создать новый метод GET для ресурса (вы делаете все это в AWS Apigateway под API -> вашимя API -> ресурсы) и просто укажите на ту же функцию лямбда.Теперь вы можете получить значение item_id из event.pathParameters.item_id.В конце вам нужно изменить свой код, чтобы он выглядел более менее так:

   .
   .
   .
    exports.handler = (event, context, callback) => {
        console.log('Received event:', JSON.stringify(event, null, 2));
        const tableName = 'test';

        const done = (err, res) => callback(null, {
            statusCode: err ? '400' : '200',
            body: err ? err.message : JSON.stringify(res),
            headers: {
                'Content-Type': 'application/json',
                'Access-Control-Allow-Origin': '*'
            },
        });

        switch (event.httpMethod) {
            .
            .
            case 'GET':
                if (event.pathParameters.item_id != undefined) {
                   dynamo.getItem({ 
                      TableName: tableName, 
                      Key: { 
                        id: { N: event.pathParameters.item_id } 
                      } 
                   },
                   done);
                } else {
                   dynamo.scan({ TableName: tableName }, done);
                }
                break;
           .
           .
           default:
                done(new Error(`Unsupported method "${event.httpMethod}"`));
        }
    };
...