簡體   English   中英

如何使用無服務器框架創建 API 的新版本?

[英]How do you create a new version of an API using serverless framework?

我有一個使用無服務器框架開發的簡單 API 部署在生產環境中。 serverless.yaml 與這個類似:

service: example

provider:
    name: aws

plugins:
    - serverless-plugin-scripts
    - serverless-offline

functions:
    package:
        runtime: nodejs14.x
        handler: build/index.handler
        events:
            - httpApi: "POST /test"

API 將在下一個版本中更改,我想為我的客戶提供向后兼容性。 我想在 API 網關中創建一個/v1/test路由,它將指向 function 的新實現,我希望/test保持不變。

有沒有辦法使用無服務器框架來做到這一點?

您可以做幾件事。

  1. 使用新路由完全創建一個新的 function。 此選項實施起來最簡單,但由於某些原因(CloudFormation 堆棧限制或其他非功能性原因),您的設置可能不允許您創建新的 function。
functions:
    # V0 package function
    package:
        runtime: nodejs14.x
        handler: build/index.handler
        events:
            - httpApi: "POST /test"
    # V1 package function
    packageV1:
        runtime: nodejs14.x
        handler: build/index.handlerv1
        events:
            - httpApi: "POST v1/test"
  1. 使用相同的 function,但 append 是一條新路徑。 然后在您的 function 代碼中檢查event負載以確定調用了哪個路徑並使用它來修改響應或功能以遵守 API 規范。
    package:
        runtime: nodejs14.x
        handler: build/index.handler # Both routes share the function, you'll need to modify logic to implement both v0/v1 spec
        events:
            - httpApi: "POST /test" # V0 route
            - httpApi: "POST v1/test" # V1 route

這兩個都適用於臨時遷移,您最終會棄用舊的 API。如果您永久需要這兩個,您還可以將 v0 API 遷移到一個新堆棧(或類似地為 v1 API 創建一個新堆棧)。

Lambda 按調用計費,而不是按函數計費。 因此,考慮到這一點,我建議創建一個完全不同的 function,這樣在時機成熟時更容易棄用和刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM