
如何使用Java Spring Boot構建REST API
AWS Lambda 是一種無服務器計算服務,允許您運行代碼而無需預置或管理服務器。Lambda 的主要優勢在于按需計費模式,即只需為實際使用的計算資源付費。這使其成為構建可擴展、經濟高效的云端功能的理想選擇。
Lambda 函數的核心是處理程序函數,它接受 JSON 格式的輸入并返回相應輸出。
選擇適合的 Python 版本作為運行時環境。
設置觸發 Lambda 函數的事件源,例如 API Gateway。
由于 Lambda 函數是無狀態的,可通過 DynamoDB 存儲跨請求的數據。
為 Lambda 函數分配 IAM 角色,以便其能夠訪問 DynamoDB 等資源。
我們的 REST API 將支持以下功能:
以下是 API 的基本結構:
我們將使用 AWS CloudFormation 模板快速搭建基礎設施。
通過 CloudFormation 上傳模板文件,快速創建所需資源。
包括一個名為 "Pets" 的 DynamoDB 表,主鍵為 id
。
完成基礎設施配置后,我們將編寫 Lambda 函數代碼以處理數據存儲和檢索。
POST 端點用于將寵物信息存儲到 DynamoDB 表中。
import boto3
def lambda_handler(event, context):
client = boto3.resource('dynamodb')
table = client.Table('Pets')
response = table.put_item(
Item={
'id': event['id'],
'name': event['name'],
'breed': event['breed'],
'gender': event['gender'],
'owner': event['owner'],
'birthday': event['birthday']
}
)
return {
'statusCode': response['ResponseMetadata']['HTTPStatusCode'],
'body': 'Record ' + event['id'] + ' added'
}
{
"id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"name": "Hansie",
"breed": "Dachshund",
"gender": "Male",
"owner": "Mike",
"birthday": "2012-05-15"
}
{
"statusCode": 200,
"body": "Record d290f1ee-6c54-4b01-90e6-d701748f0851 added"
}
GET 端點用于根據 ID 檢索寵物信息。
import boto3
def lambda_handler(event, context):
client = boto3.resource('dynamodb')
table = client.Table('Pets')
response = table.get_item(
Key={
'id': event['id']
}
)
if 'Item' in response:
return response['Item']
else:
return {
'statusCode': 404,
'body': 'Not found'
}
{
"id": "d290f1ee-6c54-4b01-90e6-d701748f0851"
}
通過 AWS API Gateway 控制臺創建 API 并將其與 Lambda 函數關聯:
選擇“從 Swagger 導入 API”選項。
將 POST 請求映射到 PetLambda-set
函數。
將 GET 請求映射到 PetLambda-get
函數,并設置查詢字符串參數映射:
{
"id": "$input.params('id')"
}
完成配置后,部署 API 并獲取自定義 URL。
在瀏覽器中訪問:
https://<your-api-url>/pet?id=d290f1ee-6c54-4b01-90e6-d701748f0851
使用 Postman 或其他工具向:
https://<your-api-url>/pet
發送 POST 請求。
通過本文示例,我們展示了如何使用 Python 和 AWS Lambda 創建無服務器 REST API。無服務器架構極大簡化了維護工作,同時保證了擴展性和經濟性。請在完成實驗后清理所有資源,以避免不必要的費用。AWS 提供了豐富的文檔和工具,幫助開發者快速構建和部署無服務器應用。
原文鏈接: https://www.activestate.com/blog/how-to-create-a-serverless-rest-api-with-python-and-aws-lambda/