雲開發中的戰鬥機 Laf,讓你像寫部落格一樣寫程式碼

米開朗基楊發表於2022-06-02

各位雲原生搬磚師 and PPT 架構師,你們有沒有想過像寫文章一樣方便地寫程式碼呢?

怎樣才能像寫文章一樣寫程式碼? 理想的需求應該是可以線上編寫、除錯函式,不用重啟服務,隨時隨地在 Web 上檢視函式的執行日誌,無需連線伺服器,無需折騰資料庫、物件儲存、Nginx 等,可以隨時隨地上線應用,招之即來,揮之即去,隨手釋出!

這時候懂王上線了,好傢伙,這不就是 Serverless 嘛,Serverless 的願景是使用者只需專注開發意圖,編寫函式程式碼,並上傳到程式碼倉庫,其他的東西不需要關心,Serverless 平臺會自動分配計算資源,並按需執行函式。

你懂的真多,可惜啊,僅有 Serverless 還滿足不了上述需求。

要想像寫文章一樣寫程式碼,除了需要 Serverless 來提供函式計算服務之外,還需要以下幾個必備條件:

  • 雲資料庫:為應用開發提供開箱即用的資料庫服務;
  • 雲端儲存:為應用開發提供專業的檔案物件儲存服務,相容 S3 和其他儲存服務介面;
  • WebIDE:線上寫程式碼,完善的型別提示、程式碼自動完成,隨手釋出上線!

懂王又上線了,這個我也懂,騰訊雲開發、Google Firebase 以及 UniCloud 就提供這樣的功能。

如果我告訴你現在有一個平臺已經俱備了上述的所有條件,而且完全開源,每個開發團隊都可以隨時擁有一個自己的雲開發平臺,你會不會內心狂喜?

是的,這個平臺就是 Laf。

應用列表

人生苦短,前端用 Laf,後端用 Laf,雲開發使用者用 Laf,獨立開發者用 Laf,初創團隊用 Laf,我也用 Laf。上鍊接?:


值得一提的是,Laf 在上週五一天內 Star 數量增長了近 300 個,並且後續連續幾天的 Star 數量呈垂直上升,簡直就是簡直了。

? Laf 是什麼?

Laf 本質上是一個集「函式計算」、「資料庫」、「物件儲存」等於一身的一站式開發平臺,可以快速的開發併發布應用。它包含了以下幾個功能:

雲函式

雲函式是執行在雲端的 JavaScript 程式碼,熟悉 Node.js 的開發者可以直接上手。

雲函式也可以使用 Typescript 編寫,無需管理伺服器,在開發控制檯線上編寫、線上除錯、一鍵儲存即可執行後端程式碼。

在你的應用中,大多數資料的獲取都可在客戶端直接運算元據庫,但是通常業務中會使用到「非資料庫操作」,如註冊、登入、檔案操作、事務、第三方介面等,可直接使用雲函式實現。

詳情請檢視雲函式的文件

雲函式

雲資料庫

前端可使用 laf-client-sdk “直連”雲資料庫,無需與服務端對介面。

通過在開發控制檯,配置相應的訪問策略,也可以實現客戶端安全運算元據庫。

詳情請檢視雲資料庫的文件

雲資料庫

雲端儲存

laf 雲端儲存是基礎 MinIO 提供的物件儲存服務,laf 提供了完全相容 MinIO (aws s3-api) 的物件儲存服務, 在 laf oss 文件上線之前,開發者完全可參考 MinIO 的文件來使用 laf oss。

雲端儲存

靜態託管

laf 支援靜態網站的託管,可以快速的上線靜態網站,無需折騰 Nginx。

?‍? 誰適合使用 Laf ?

  1. 前端開發者 + laf = 全棧開發者,前端秒變全棧,成為真正的大前端。

    • laf 為前端提供了 laf-client-sdk,適用於任何 js 執行環境;
    • laf 雲函式使用 js/ts 開發,前後端程式碼無隔裂,無門檻快速上手;
    • laf 提供了靜態網站託管,可將前端構建的網頁直接同步部署上來,無需再配置伺服器、Nginx、域名等;
    • laf 後續會提供多種客戶端的 SDK(Flutter/Android/iOS 等),為所有客戶端開發者提供後端開發服務和一致的開發體驗。
  2. 後端開發者,可以從瑣事中解放出來,專注於業務本身,提升開發效率。

    • laf 可以節約伺服器運維、多環境部署和管理精力;
    • laf 可以讓你告別配置、除錯 Nginx;
    • laf 可以讓你告別「為每個專案手動部署資料庫、安全顧慮等重複性工作」;
    • laf 可以讓你告別「修改一次、釋出半天」的重複繁瑣的迭代體驗;
    • laf 可以讓你隨時隨地在 Web 上檢視函式的執行日誌,不必再連線伺服器,費神費眼翻找;
    • laf 可以讓你「像寫部落格一樣寫一個函式」,招之即來,揮之即去,隨手釋出!
  3. 雲開發使用者,若你是微信雲開發使用者,你不僅可以獲得更強大、快速的開發體驗,還不被微信雲開發平臺鎖定。

    • 你可以為客戶提供原始碼交付,為客戶私有部署一套 laf + 你的雲開發應用,而使用閉源的雲開發服務,無法交付可獨立執行的原始碼;
    • 你可以根據未來的需要,隨時將自己的產品部署到自己的伺服器上,laf 是開源免費的;
    • 你甚至可以修改、訂製自己的雲開發平臺,laf 是開源的、高度可擴充套件的。
  4. Node.js 開發者,laf 是使用 Node.js 開發的,你可以把 laf 當成一個更方便的 Node.js 開發平臺 or 框架。

    • 你可以線上編寫、除錯函式,不用重啟服務,一鍵釋出即可用;
    • 你可以線上檢視、檢索函式呼叫日誌;
    • 你可以不必折騰資料庫、物件儲存、Nginx,隨時隨地讓你的應用上線;
    • 你可以隨手將一段 Node.js 程式碼上雲,比如一段爬蟲,一段監控程式碼,像寫部落格一樣寫 Node!
  5. 獨立開發者、初創創業團隊, 節約成本,快速開始,專注業務。

    • 減少啟動專案開發的流程,快速啟動,縮短產品驗證週期;
    • 極大程度提高迭代速度,隨時應對變化,隨時釋出;
    • 專注於產品業務本身,快速推出最小可用產品 (MVP),快速進行產品、市場驗證;
    • 一個人 + laf = 團隊。

? Laf 能用來做什麼?

laf 是應用的後端開發平臺,理論上可以做任何應用!

  1. 使用 laf 快速開發微信小程式 / 公眾號: 電商、社交、工具、教育、金融、遊戲、短視訊、社群、企業等應用!

    • 微信小程式強要求 https 訪問,可直接使用 [lafyun.com];(http://www.lafyun.com "lafyun.com") 建立應用,為小程式提供 https 的介面服務;
    • 可將應用的 h5 頁面和管理端 (admin) 直接部署到可由 laf 靜態託管;
    • 將 h5 直接託管到 laf 上,將分配的專用域名配置到公眾號即可線上訪問;
    • 使用雲函式實現微信授權、支付等業務;
    • 使用雲端儲存儲存視訊、頭像等使用者資料。
  2. 開發 Android or iOS 應用。

    • 使用雲函式、雲資料庫、雲端儲存進行業務處理;
    • 應用的後端管理 (admin) 直接部署到可由 laf 靜態託管;
    • 可使用雲函式實現微信授權、支付、熱更新等業務。
  3. 部署個人部落格、企業官網。

    • 將 vuepress / hexo / hugo 等靜態生成的部落格,一鍵部署到 laf 靜態託管上, 見 laf-cli
    • 可使用雲函式來處理使用者留言、評論、訪問統計等業務
    • 可使用雲函式擴充套件部落格的其它能力,如課程、投票、提問等
    • 可使用雲端儲存儲存視訊、圖片
    • 可使用雲函式做爬蟲、推送等功能
  4. 企業資訊化建設:企業私有部署一套 laf 雲開發平臺

    • 快速開發企業內部資訊化系統,可快速上線、修改、迭代,降成本
    • 支援多應用、多賬戶,不同部門、不同系統,即可隔離,亦可連通
    • 可藉助 laf 社群生態,直接使用現存的 laf 應用,開箱即用,降成本
    • laf 開源免費,沒有技術鎖定的顧慮,可自由訂製和使用
  5. 個人開發者的「手邊雲」

    • laf 讓開發者隨手寫的一段程式碼,瞬間具備隨手上雲的能力
    • 就像在你手機的備忘錄隨手敲下一段文字,自動同步到雲端,且可被全網訪問和執行
    • laf 是每個開發者的“爛筆頭”,像記事一樣寫個函式
    • laf 是每個開發者的“私人助理”,比如隨時可以寫一個定時傳送簡訊、郵件通知的函式
  6. 其它

    • 有使用者把 laf 雲端儲存當網盤使用
    • 有使用者把 laf 應用當成一個日誌伺服器,收集客戶端日誌資料,使用雲函式做分析統計
    • 有使用者用 laf 來跑爬蟲,抓取三方新聞和諮訊等內容
    • 有使用者使用 laf 雲函式做 webhook,監聽 Git 倉庫提交訊息,推送到釘釘、企業微信群
    • 有使用者使用 laf 雲函式做撥測,定時檢查線上服務的健康狀態
    • ...

未來,lafyun.com 會上線一個應用市場,彙總收集這些應用,讓 laf 使用者一鍵即可使用海量應用 !

? 如何快速開始?

下面我們將在 lafyun.com 上,通過開發一個簡單的「使用者登入/註冊」的功能,快速體驗 laf 雲開發。

準備工作

  1. 你需要在 lafyun.com 上註冊一個賬戶;
  2. 登入到 lafyun.com 控制檯 ,點選左上角的 新建 按鈕,建立一個空應用;
  3. 待應用成功啟動後,點選右側 「開發」 按鈕,進入應用的「開發控制檯」,接下來,我們將在「開發控制檯」 進行第一個 laf 應用的功能開發。

編寫雲函式

本示例會編寫兩個雲函式:register 處理註冊請求,login 處理登入請求。

使用者註冊雲函式

在「雲函式」管理頁面,點選 「新建函式」,建立註冊雲函式 register。然後點選 register 函式右側的 「開發」按鈕,進入 WebIDE,編寫以下程式碼:

import cloud from '@/cloud-sdk'
import { createHash } from 'crypto'

exports.main = async function (ctx: FunctionContext) {
  const username = ctx.body?.username || ''
  const password = ctx.body?.password || ''

  // check param
  if (!/[a-zA-Z0-9]{3,16}/.test(username)) return { error: 'invalid username' }
  if (!/[a-zA-Z0-9]{3,16}/.test(password))  return { error: 'invalid password' }

  // check username existed
  const db = cloud.database()
  const exists = await db.collection('users')
    .where({ username: username })
    .count()

  if(exists.total > 0) return { error: 'username already existed'}

  // add user
  const { id } = await db.collection('users')
    .add({
      username: username,
      password: createHash('sha256').update(password).digest('hex'),
      created_at: new Date()
    })

  console.log('user registered: ', id)
  return { data: id }
}

點選右上角的 「顯示除錯皮膚」(Ctrl/Cmd + B) 即可除錯執行。

點選 「儲存」 & 「釋出」 函式即釋出上線!

使用者登入雲函式

同上,建立 login 雲函式,編寫以下程式碼:

import cloud from '@/cloud-sdk'
import { createHash } from 'crypto'

exports.main = async function (ctx: FunctionContext) {
  const username = ctx.body?.username || ''
  const password = ctx.body?.password || ''

  // check user login
  const db = cloud.database()
  const res = await db.collection('users')
    .where({
      username: username,
      password: createHash('sha256').update(password).digest('hex')
    })
    .getOne()

  if (!res.data)
    return { error: 'invalid username or password' }
  
  // generate jwt token
  const user_id = res.data._id
  const payload = {
    uid: user_id,
    exp: Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 7
  }

  const access_token = cloud.getToken(payload)

  return {
    uid: res.data._id,
    access_token: access_token
  }
}

點選右上角的 「顯示除錯皮膚」(Ctrl/Cmd + B) 即可除錯執行。

點選 「儲存」 & 「釋出」 函式即釋出上線!

使用 curl 呼叫雲函式

最後可以通過雲函式列表頁面,檢視 & 複製雲函式的呼叫地址, 或將以下 curl 命令中的 APPID 替換成你的 APPID 後執行:

# 註冊使用者
$ curl -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "admin"}' https://APPID.lafyun.com/register

# 使用者登陸
$ curl -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "admin"}' https://APPID.lafyun.com/login

APPID 可以在 lafyun.com 的歡迎頁面找到。

在前端專案中使用雲函式

在你的前端專案中安裝 laf client sdk:

$ npm install laf-client-sdk

最後,可以在你的 Vue/React/Angular/小程式 頁面中呼叫這兩個雲函式完成具體的登入註冊功能!例如:

// user.ts

import { Cloud } from 'laf-client-sdk'

const cloud = new Cloud({ 
  baseUrl: "https://APPID.lafyun.com",
  getAccessToken: () => localStorage.getItem('access_token')
})

// regiser function
export async function register(username: string, password: string) {
  const res = await cloud.invoke('register', {
    username: username,
    password: password
  })

  return res
}

// login function
export async function login(username: string, password: string) {
  const res = await cloud.invoke('login', {
    username: username,
    password: password
  })

  if(res.access_token) {
    // save token
    localStorage.setItem('access_token', res.access_token)
  }

  return res
}

注意事項

  • 我們可以在開發控制檯,檢視雲函式的呼叫日誌,線上除錯等;
  • 如果呼叫返回 404,請檢查函式名是否拼寫錯誤,或者雲函式是否已經發布。

? 總結

運維同學與後端同學請注意,由於 Laf 過於強悍,你們不再需要折騰基礎架構和後端服務,很可能會因為工作量不飽和而面臨被裁的風險!注意控制風險!

相關文章