1. 程式人生 > 實用技巧 >實戰丨如何把 Flutter 雲端一體化做到極致?

實戰丨如何把 Flutter 雲端一體化做到極致?

1. 背景

雲開發CloudBase 提供了強大的一站式後端服務,並且和微信團隊合作推出了「小程式·雲開發」,服務了超過 50 萬開發者。

我們還想把雲開發和 Flutter 結合,實現一套極致的 Flutter 雲端一體化工作流。此前,已經做過了一些探索:

  • 實現雲開發的 Flutter SDK

    Flutter客戶端可以使用雲開發 Flutter SDK,呼叫雲函式、雲資料庫和雲端儲存等後端資源。However, 雲函式不支援 dart 執行時,所以只有 baas 能力,沒有 faas 能力。

  • 在 Serverless 雲應用內部署 dart server

    Serverless 雲應用的底層是容器,可以支援任何語言,因此可以部署 dart server 雲應用,完善了雲端的開發能力。However,這裡還需要開發者理解容器服務,編寫 dockfile,還需要對 dart server 進行框架選型,有一定的研發門檻。

為了把雲端一體化做到極致,我們又做了 CloudBase Framework -- 一體化的應用開發部署工具,可以一鍵建立並部署 dart server 應用,並且支援宣告式的建立雲資源。

CloudBase Framework 已經在 Github 開源,歡迎大家給專案點個 Star

2. CloudBase Framework For Flutter 能做什麼 ?

2.1 快速建立並部署 dart server

藉助 CloudBase Framework,只需要幾行命令,就能開發一個免運維、自動擴縮容、高效能的 dart server 應用。

# 安裝 CLI 工具
npm install -g @cloudbase/cli

# 登入 CloudBase
cloudbase login

# 初始化 dart server 應用
cloudbase init --template dart

# 進入 dart server 應用根目錄
cd dartapp

# 部署 dart server 到雲上
cloudbase framework:deploy

部署成功

訪問服務:https://test-docker-117e45.service.tcloudbase.com/dartapp

2.2 開發簡單的 API 介面

在建立的 dart server 應用內,開啟 lib/channel.dart 檔案,在 entryPoint() 函式裡開發你的 API 介面。

@override
Controller get entryPoint {
  final router = Router();

  router.route("/example").linkFunction((request) async {
    return Response.ok({"key": "value"});
  });

  return router;
}

重新部署應用後,請求子路徑 /example

2.3 開箱即用的雲資料庫

我們在 dart server 應用裡集成了雲資料庫,只需要簡單修改程式碼,就可以呼叫資料庫。

通過 Flutter SDK 也可以在客戶端呼叫同一個雲資料庫

lib/channel.dart 檔案的 prepare() 函式裡初始化雲資料庫。

@override
Future prepare() async {
  /// 其他初始化程式碼
  ...

  /// 初始化雲資料庫
  database = CloudBaseDatabase(CloudBaseCore.init({
    /// 雲開發環境 ID
    'env': 'your-env-id',

    /// 騰訊雲 API 固定金鑰對
    /// 獲取路徑: https://console.cloud.tencent.com/cam/capi
    'secretId': 'your-secretId',

    /// 同上
    'secretKey': 'your-secretKey'
  }));
}

entryPoint() 函式裡開發一個數據庫介面。

@override
Controller get entryPoint {
  final router = Router();

  /// 在請求裡使用雲資料庫
  /// 雲資料庫詳細文件請參考: https://docs.cloudbase.net/api-reference/flutter/database.html
  router.route("/user").linkFunction((request) async {
    try {
      /// 在 dart server 部署過程中已經宣告式的建立了 user 集合
      final res = await database.collection('user').count();

      /// 處理錯誤
      if (res.code != null) {
        return Response.serverError(
            body: {"code": res.code, "message": res.message});
      }

      /// 回包
      return Response.ok({"user_count": res.total});
    } catch (err) {
      return Response.serverError(body: err);
    }
  });

  return router;
}

重新部署應用後,請求子路徑 /user

2.4 宣告式建立雲資源

在應用的配置檔案 cloudbaserc.json 裡,宣告兩個外掛:server 和 db。所以在一鍵部署的過程中,既建立了dart server應用,也建立了應用依賴的資料庫集合 user

{
  "envId": "env-123",
  "framework": {
    "name": "aqueduct-starter",
    "plugins": {
      "server": {
        "use": "@cloudbase/framework-plugin-dart",
        "inputs": {
          "serviceName": "dartapp",
          "servicePath": "/dartapp",
          "localPath": "./"
        }
      },
      "db": {
        "use": "@cloudbase/framework-plugin-database",
        "inputs": {
          "collections": [
            {
              "collectionName": "user",
              "description": "使用者集合",
              "aclTag": "PRIVATE"
            }
          ]
        }
      }
    }
  }
}

2.5 更多

  • 通過模板變數和模式切換,可以快速部署同一個應用到多個環境(體驗、預發、生產)
  • 通過 Coding CI/CD 進行審批發布

更多可看技術文件https://cloudbase.net

3. CloudBase Framework 帶來的好處

3.1 降本增效

Flutter 開發者可以使用 CloudBase Framework 開發 API 介面服務,完成前後端業務的閉環,並且具備免運維、自動擴縮容的能力。

Flutter 雲端一體化的研發成本 = 傳統模式的研發成本 - 運維成本 - 前後端聯調成本 - 空閒資源成本

3.2 雲原生

「 Flutter x CloudBase Framework 」 是按照雲原生的思路打造的解決方案,是面向未來的解決方案,正是客戶端同學上雲的最佳實踐。

4. CloudBase Framework 的願景

4.1 成為 Flutter 開發工作流的一部分

目前藉助 CloudBase Framework 可以快速開發並上線 dart server 應用,Flutter 開發者可以自己完成前後端業務的閉環。

後續,希望可以和 Flutter 客戶端工程有更深入的整合,成為 Flutter 開發工作流的一部分。

4.2 助力更多團隊上雲

CloudBase Framework 是雲開發的一體化開發部署工具,可以幫忙開發者快速構建雲上應用,後續將持續優化體驗,支援更多功能,助力更多團隊上雲。

目前騰訊內部已有多個團隊在使用 CLoudBase Framework x Flutter 開發模式,研發效率提升了 100%

5. 寫在最後

5.1 開源貢獻

CloudBase Framework 專案已經在 Github 開源,歡迎各位開發者為 CloudBase Framework 共享一份力量,讓這個專案能夠更好的幫助開發者提升開發效率

https://github.com/TencentCloudBase/cloudbase-framework

(也歡迎給專案點個 Star,支援我們做得更好 ~ )