所有文章 > 如何集成API > 如何使用dynamodb和serverless在java中创建rest api
如何使用dynamodb和serverless在java中创建rest api

如何使用dynamodb和serverless在java中创建rest api

一. 使用 Java、DynamoDB 与 Serverless 框架创建 REST API:完整教程

本文将详细介绍如何使用 AWS DynamoDBServerless 框架,在 Java 中创建一个功能完整的 REST API。通过本文,您将学习如何安装工具、创建无服务器项目、管理 DynamoDB 表、实现 API 处理程序,以及最终将服务部署到云端。


二. 安装先决条件

在开始之前,请确保环境中已安装以下工具:

1. 测试 Java 安装

建议使用 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)

2. 测试 Maven 安装

建议使用 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"

3. 安装 Serverless 框架

$ 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

1. 更新项目配置

a. 修改 pom.xml

更新项目名称为 products-api

b. 修改 serverless.yml

  • 指定 Java 版本:
provider:
  name: aws
  runtime: java17
  • 添加 Lambda 函数处理程序及部署配置。

四. 管理 DynamoDB 表

1. 配置 IAM 权限

serverless.yml provider 部分添加:

iamRoleStatements:
  - Effect: "Allow"
    Action:
      - "dynamodb:*"
    Resource: "*"

2. 定义 DynamoDB 表

resources:
  Resources:
    ProductsTable:
      Type: "AWS::DynamoDB::Table"
      Properties:
        TableName: "Products"
        AttributeDefinitions:
          - AttributeName: "id"
            AttributeType: "S"
        KeySchema:
          - AttributeName: "id"
            KeyType: "HASH"
        BillingMode: "PAY_PER_REQUEST"

五. 实现 DynamoDB 适配器

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;
    }
}

六. 定义产品 POJO

@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; }
}

七. 实现 API 处理程序

1. API 端点

  • POST /products:创建产品
  • GET /products:获取所有产品
  • GET /products/{id}:根据 ID 获取产品
  • DELETE /products/{id}:根据 ID 删除产品

2. 创建产品 Lambda 处理程序

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();
    }
}

其他端点处理程序逻辑类似。


八. 部署服务

1. 构建项目

$ mvn clean install

2. 部署到 AWS

$ serverless deploy

部署成功后,Serverless 会提供完整 API URL,例如:

https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products

九. 调用 API 示例

1. 创建产品

$ 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}'

2. 获取所有产品

$ curl https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products

3. 根据 ID 获取产品

$ curl https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/{id}

4. 删除产品

$ curl -X DELETE https://xxxxxx.execute-api.us-east-1.amazonaws.com/dev/products/{id}

十. 总结

本文讲解了如何使用 Java、DynamoDB 与 Serverless 框架 创建一个完整的 REST API。我们从环境配置、项目创建、DynamoDB 管理、Lambda 函数实现到最终部署,逐步展示了实践过程。希望本文对您有所帮助,欢迎在评论区分享问题和反馈。


原文链接: Serverless 官方博客

#你可能也喜欢这些API文章!

我们有何不同?

API服务商零注册

多API并行试用

数据驱动选型,提升决策效率

查看全部API→
🔥

热门场景实测,选对API

#AI文本生成大模型API

对比大模型API的内容创意新颖性、情感共鸣力、商业转化潜力

25个渠道
一键对比试用API 限时免费

#AI深度推理大模型API

对比大模型API的逻辑推理准确性、分析深度、可视化建议合理性

10个渠道
一键对比试用API 限时免费