برنامه نویسی
یک API بدون سرور ایجاد کنید که با جدول AWS DynamoDB تعامل داشته باشد
هنگامی که ما API را فراخوانی می کنیم، درخواست ما به یک تابع Lambda هدایت می شود که عمل مورد نظر را بین Lambda و DynamoDB انجام می دهد.
**یک جدول DynamoDB ایجاد کنید
یک تابع Lambda ایجاد کنید
- به کنسول Lambda در https://console.aws.amazon.com/lambda وارد شوید
- ایجاد تابع را انتخاب کنید.
- برای نام تابع، http-demo-function را وارد کنید.
- در قسمت Permissions Change default execution role را انتخاب کنید.
- ایجاد نقش جدید از الگوهای خط مشی AWS را انتخاب کنید.
- برای نام نقش، http-demo-role را وارد کنید.
-
برای الگوهای خط مشی، مجوزهای میکروسرویس ساده را انتخاب کنید.
-
ایجاد تابع
-
index.mjs را در تب Code باز کنید و تمام کدها را با این کد نمونه جایگزین کنید.
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import {
DynamoDBDocumentClient,
ScanCommand,
PutCommand,
GetCommand,
DeleteCommand,
} from "@aws-sdk/lib-dynamodb";
const client = new DynamoDBClient({});
const dynamo = DynamoDBDocumentClient.from(client);
const tableName = "items";
export const handler = async (event, context) => {
let body;
let statusCode = 200;
const headers = {
"Content-Type": "application/json",
};
try {
switch (event.routeKey) {
case "DELETE /items/{id}":
await dynamo.send(
new DeleteCommand({
TableName: tableName,
Key: {
id: event.pathParameters.id,
},
})
);
body = `Deleted item ${event.pathParameters.id}`;
break;
case "GET /items/{id}":
body = await dynamo.send(
new GetCommand({
TableName: tableName,
Key: {
id: event.pathParameters.id,
},
})
);
body = body.Item;
break;
case "GET /items":
body = await dynamo.send(
new ScanCommand({ TableName: tableName })
);
body = body.Items;
break;
case "PUT /items":
let requestJSON = JSON.parse(event.body);
await dynamo.send(
new PutCommand({
TableName: tableName,
Item: {
id: requestJSON.id,
price: requestJSON.price,
name: requestJSON.name,
},
})
);
body = `Put item ${requestJSON.id}`;
break;
default:
throw new Error(`Unsupported route: "${event.routeKey}"`);
}
} catch (err) {
statusCode = 400;
body = err.message;
} finally {
body = JSON.stringify(body);
}
return {
statusCode,
body,
headers,
};
};
- برای به روز رسانی عملکرد، Deploy را انتخاب کنید.
یک API HTTP ایجاد کنید
- به کنسول API Gateway در https://console.aws.amazon.com/apigateway وارد شوید.
- Create API را انتخاب کنید و سپس برای HTTP API، Build را انتخاب کنید.
- برای نام API، http-demo-api را وارد کنید.
- Next را انتخاب کنید.
- مرحله ای که API Gateway را مرور کنید، Next را انتخاب کنید.
- ایجاد را انتخاب کنید.
ایجاد مسیرها
- به https://console.aws.amazon.com/apigateway مراجعه کنید
- API خود را انتخاب کنید.
- مسیرها را انتخاب کنید.
- ایجاد را انتخاب کنید.
- برای Method، GET را انتخاب کنید.
- برای مسیر، /items/{id} را وارد کنید.
- ایجاد را انتخاب کنید.
- اکنون باید مراحل 4-7 را برای GET /items، DELETE /items/{id} و PUT /items تکرار کنید.
ایجاد یکپارچگی
این برای اتصال یک مسیر به منابع پشتیبان استفاده می شود.
- به https://console.aws.amazon.com/apigateway مراجعه کنید
- API خود را انتخاب کنید.
- Integrations را انتخاب کنید.
- مدیریت ادغام ها را انتخاب کنید، ایجاد را انتخاب کنید.
- برای نوع ادغام، تابع Lambda را انتخاب کنید.
- برای تابع Lambda، تابع http-demo-function را وارد کنید.
- ایجاد را انتخاب کنید.
ادغام ما را به مسیرها وصل کنید
- به https://console.aws.amazon.com/apigateway مراجعه کنید
- API خود را انتخاب کنید.
- Integrations را انتخاب کنید.
- مسیری را انتخاب کنید.
- در بخش Choose an موجود ادغام، تابع http-demo را انتخاب کنید. Attach integration را انتخاب کنید. این مراحل 4-6 را برای تمام مسیرهایی که قبلا ایجاد کردیم تکرار کنید.
تست API ما
curl -X "PUT" -H "Content-Type: application/json" -d "{\"id\": \"123\", \"price\": 12345, \"name\": \"myitem\"}" https://abc123.execute-api.us-east-1.amazonaws.com/items
curl https://abc123.execute-api.us-east-1.amazonaws.com/items
curl https://abc123.execute-api.us-east-1.amazonaws.com/items/123
تست حذف یک مورد
curl -X "DELETE" https://abc123.execute-api.us-east-1.amazonaws.com/items/123