96 lines
2.4 KiB
Markdown
96 lines
2.4 KiB
Markdown
# REST API na środoiwsku AWS Lambda i DynamoDB
|
|
|
|
# Konfiguracja
|
|
Poradnik jak skonfigurować środowisko można znaleźć pod adresem: https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-dynamo-db.html
|
|
|
|
# Kod
|
|
Poniżej znajduje się kod funkcji Lambda, która obsługuje zapytania HTTP i komunikuje się z bazą danych DynamoDB - wykonany na potrzebę zadania z przedmiotu *Chmury obliczeniowe* (zad. `6.2`)
|
|
|
|
```js
|
|
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
|
|
import {
|
|
DynamoDBDocumentClient,
|
|
PutCommand,
|
|
GetCommand,
|
|
DeleteCommand,
|
|
} from "@aws-sdk/lib-dynamodb";
|
|
import { randomUUID } from 'crypto';
|
|
|
|
const client = new DynamoDBClient({});
|
|
const dynamo = DynamoDBDocumentClient.from(client);
|
|
const tableName = "posts";
|
|
|
|
const DB = {
|
|
async create({ userId, title, body }) {
|
|
const id = randomUUID();
|
|
await dynamo.send(
|
|
new PutCommand({
|
|
TableName: tableName,
|
|
Item: { id, userId, title, body },
|
|
})
|
|
);
|
|
return await DB.get(id);
|
|
},
|
|
async get(id) {
|
|
return (await dynamo.send(
|
|
new GetCommand({
|
|
TableName: tableName,
|
|
Key: { id },
|
|
})
|
|
))?.Item;
|
|
},
|
|
async update(id, { userId, title, body }) {
|
|
await dynamo.send(
|
|
new PutCommand({
|
|
TableName: tableName,
|
|
Item: { id, userId, title, body },
|
|
})
|
|
);
|
|
return await DB.get(id);
|
|
},
|
|
async delete(id) {
|
|
_result = await DB.get(id);
|
|
await dynamo.send(
|
|
new DeleteCommand({
|
|
TableName: tableName,
|
|
Key: { id },
|
|
})
|
|
);
|
|
return _result;
|
|
},
|
|
}
|
|
|
|
export const handler = async (event, context) => {
|
|
let body;
|
|
|
|
try {
|
|
switch (event.routeKey) {
|
|
case "POST /":
|
|
body = await DB.create(JSON.parse(event.body));
|
|
break;
|
|
case "DELETE /{id}":
|
|
body = await DB.delete(event.pathParameters.id);
|
|
break;
|
|
case "GET /{id}":
|
|
body = await DB.get(event.pathParameters.id);
|
|
break;
|
|
case "PUT /{id}":
|
|
body = await DB.update(event.pathParameters.id, JSON.parse(event.body));
|
|
break;
|
|
default:
|
|
throw new Error(`Unsupported route: "${event.routeKey}"`);
|
|
}
|
|
|
|
return {
|
|
statusCode: 200,
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify(body),
|
|
};
|
|
} catch (err) {
|
|
return {
|
|
statusCode: 400,
|
|
body: JSON.stringify(err.message),
|
|
};
|
|
}
|
|
};
|
|
``` |