雲開發中的戰鬥機 Laf,讓你像寫博客一樣寫代碼

各位雲原生搬磚師 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 過於強悍,你們不再需要折騰基礎架構和後端服務,很可能會因爲工作量不飽和而面臨被裁的風險!注意控制風險!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章