二. 安裝先決條件

在開始之前,請確保環境中已安裝以下工具:

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

provider:
  name: aws
  runtime: java17

四. 管理 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 端點

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 官方博客

上一篇:

Python調用文本相似度比較API:精準識別重復內容的實用指南

下一篇:

使用Chrome window.ai API在Vue中集成AI功能·121
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費