
2025 Prometheus API 完整指南:基础查询、PromQL 高级用法与自定义监控实践
本文将详细介绍如何使用 AWS DynamoDB 和 Serverless 框架,在 Java 中创建一个功能完整的 REST API。通过本文,您将学习如何安装工具、创建无服务器项目、管理 DynamoDB 表、实现 API 处理程序,以及最终将服务部署到云端。
在开始之前,请确保环境中已安装以下工具:
建议使用 Java 17 或 21 LTS:
$ java --version
java 17.0.8 2024-04-17 LTS
Java(TM) SE Runtime Environment (build 17.0.8+10-LTS-194)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+10-LTS-194, mixed mode)
建议使用 Maven 3.8+:
$ mvn -v
Apache Maven 3.8.8 (f9b9e1a1f9e)
Maven home: /usr/local/apache-maven-3.8.8
Java version: 17, vendor: Oracle Corporation, Java home: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "13.6", arch: "x86_64"
$ npm install -g serverless
$ serverless --version
Framework Core: 3.x.x
使用 Serverless 框架创建新项目:
$ serverless create --template aws-java-maven --name products-api
生成的项目目录示例:
/Users/username/projects/serverless/apps/products-api
pom.xml
更新项目名称为 products-api
。
serverless.yml
provider:
name: aws
runtime: java17
在 serverless.yml
provider
部分添加:
iamRoleStatements:
- Effect: "Allow"
Action:
- "dynamodb:*"
Resource: "*"
resources:
Resources:
ProductsTable:
Type: "AWS::DynamoDB::Table"
Properties:
TableName: "Products"
AttributeDefinitions:
- AttributeName: "id"
AttributeType: "S"
KeySchema:
- AttributeName: "id"
KeyType: "HASH"
BillingMode: "PAY_PER_REQUEST"
public class DynamoDBAdapter {
private static volatile DynamoDBAdapter instance;
private final AmazonDynamoDB client;
private final DynamoDBMapper mapper;
private DynamoDBAdapter() {
this.client = AmazonDynamoDBClientBuilder.standard().build();
this.mapper = new DynamoDBMapper(client);
}
public static DynamoDBAdapter getInstance() {
if (instance == null) {
synchronized (DynamoDBAdapter.class) {
if (instance == null) {
instance = new DynamoDBAdapter();
}
}
}
return instance;
}
public DynamoDBMapper getMapper() {
return this.mapper;
}
}
@DynamoDBTable(tableName = "Products")
public class Product {
private String id;
private String name;
private double price;
@DynamoDBHashKey(attributeName = "id")
public String getId() { return id; }
public void setId(String id) { this.id = id; }
@DynamoDBAttribute(attributeName = "name")
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@DynamoDBAttribute(attributeName = "price")
public double getPrice() { return price; }
public void setPrice(double price) { this.price = price; }
}
POST /products
:创建产品GET /products
:获取所有产品GET /products/{id}
:根据 ID 获取产品DELETE /products/{id}
:根据 ID 删除产品public class CreateProductHandler implements RequestHandler < Map < String, Object > , ApiGatewayResponse > {
@Override
public ApiGatewayResponse handleRequest(Map < String, Object > input, Context context) {
Product product = new ObjectMapper().convertValue(input.get("body"), Product.class);
DynamoDBAdapter.getInstance().getMapper().save(product);
return ApiGatewayResponse.builder()
.setStatusCode(200)
.setObjectBody(product)
.build();
}
}
其他端点处理程序逻辑类似。
$ mvn clean install
$ serverless deploy
部署成功后,Serverless 会提供完整 API URL,例如:
https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products
$ curl -X POST https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products \
-H "Content-Type: application/json" \
-d '{"name":"Product1","price":9.99}'
$ curl https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products
$ curl https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/{id}
$ curl -X DELETE https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/{id}
本文讲解了如何使用 Java、DynamoDB 与 Serverless 框架 创建一个完整的 REST API。我们从环境配置、项目创建、DynamoDB 管理、Lambda 函数实现到最终部署,逐步展示了实践过程。希望本文对您有所帮助,欢迎在评论区分享问题和反馈。
原文链接: Serverless 官方博客