各位雲原生搬磚師 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 ?
-
前端開發者 +
laf
= 全棧開發者,前端秒變全棧,成為真正的大前端。laf
為前端提供了 laf-client-sdk,適用於任何 js 執行環境;laf
雲函式使用 js/ts 開發,前後端程式碼無隔裂,無門檻快速上手;laf
提供了靜態網站託管,可將前端構建的網頁直接同步部署上來,無需再配置伺服器、Nginx、域名等;laf
後續會提供多種客戶端的 SDK(Flutter/Android/iOS 等),為所有客戶端開發者提供後端開發服務和一致的開發體驗。
-
後端開發者,可以從瑣事中解放出來,專注於業務本身,提升開發效率。
laf
可以節約伺服器運維、多環境部署和管理精力;laf
可以讓你告別配置、除錯 Nginx;laf
可以讓你告別「為每個專案手動部署資料庫、安全顧慮等重複性工作」;laf
可以讓你告別「修改一次、釋出半天」的重複繁瑣的迭代體驗;laf
可以讓你隨時隨地在 Web 上檢視函式的執行日誌,不必再連線伺服器,費神費眼翻找;laf
可以讓你「像寫部落格一樣寫一個函式」,招之即來,揮之即去,隨手釋出!
-
雲開發使用者,若你是微信雲開發使用者,你不僅可以獲得更強大、快速的開發體驗,還不被微信雲開發平臺鎖定。
- 你可以為客戶提供原始碼交付,為客戶私有部署一套
laf
+ 你的雲開發應用,而使用閉源的雲開發服務,無法交付可獨立執行的原始碼; - 你可以根據未來的需要,隨時將自己的產品部署到自己的伺服器上,
laf
是開源免費的; - 你甚至可以修改、訂製自己的雲開發平臺,
laf
是開源的、高度可擴充套件的。
- 你可以為客戶提供原始碼交付,為客戶私有部署一套
-
Node.js 開發者,
laf
是使用 Node.js 開發的,你可以把laf
當成一個更方便的 Node.js 開發平臺 or 框架。- 你可以線上編寫、除錯函式,不用重啟服務,一鍵釋出即可用;
- 你可以線上檢視、檢索函式呼叫日誌;
- 你可以不必折騰資料庫、物件儲存、Nginx,隨時隨地讓你的應用上線;
- 你可以隨手將一段 Node.js 程式碼上雲,比如一段爬蟲,一段監控程式碼,像寫部落格一樣寫 Node!
-
獨立開發者、初創創業團隊, 節約成本,快速開始,專注業務。
- 減少啟動專案開發的流程,快速啟動,縮短產品驗證週期;
- 極大程度提高迭代速度,隨時應對變化,隨時釋出;
- 專注於產品業務本身,快速推出最小可用產品 (MVP),快速進行產品、市場驗證;
- 一個人 +
laf
= 團隊。
? Laf 能用來做什麼?
laf
是應用的後端開發平臺,理論上可以做任何應用!
-
使用 laf 快速開發微信小程式 / 公眾號: 電商、社交、工具、教育、金融、遊戲、短視訊、社群、企業等應用!
- 微信小程式強要求 https 訪問,可直接使用 [lafyun.com];(http://www.lafyun.com "lafyun.com") 建立應用,為小程式提供 https 的介面服務;
- 可將應用的 h5 頁面和管理端 (admin) 直接部署到可由
laf
靜態託管; - 將 h5 直接託管到
laf
上,將分配的專用域名配置到公眾號即可線上訪問; - 使用雲函式實現微信授權、支付等業務;
- 使用雲端儲存儲存視訊、頭像等使用者資料。
-
開發 Android or iOS 應用。
- 使用雲函式、雲資料庫、雲端儲存進行業務處理;
- 應用的後端管理 (admin) 直接部署到可由
laf
靜態託管; - 可使用雲函式實現微信授權、支付、熱更新等業務。
-
部署個人部落格、企業官網。
- 將 vuepress / hexo / hugo 等靜態生成的部落格,一鍵部署到
laf
靜態託管上, 見 laf-cli - 可使用雲函式來處理使用者留言、評論、訪問統計等業務
- 可使用雲函式擴充套件部落格的其它能力,如課程、投票、提問等
- 可使用雲端儲存儲存視訊、圖片
- 可使用雲函式做爬蟲、推送等功能
- 將 vuepress / hexo / hugo 等靜態生成的部落格,一鍵部署到
-
企業資訊化建設:企業私有部署一套
laf
雲開發平臺- 快速開發企業內部資訊化系統,可快速上線、修改、迭代,降成本
- 支援多應用、多賬戶,不同部門、不同系統,即可隔離,亦可連通
- 可藉助
laf
社群生態,直接使用現存的laf
應用,開箱即用,降成本 laf
開源免費,沒有技術鎖定的顧慮,可自由訂製和使用
-
個人開發者的「手邊雲」
laf
讓開發者隨手寫的一段程式碼,瞬間具備隨手上雲的能力- 就像在你手機的備忘錄隨手敲下一段文字,自動同步到雲端,且可被全網訪問和執行
laf
是每個開發者的“爛筆頭”,像記事一樣寫個函式laf
是每個開發者的“私人助理”,比如隨時可以寫一個定時傳送簡訊、郵件通知的函式
-
其它
- 有使用者把
laf
雲端儲存當網盤使用 - 有使用者把
laf
應用當成一個日誌伺服器,收集客戶端日誌資料,使用雲函式做分析統計 - 有使用者用
laf
來跑爬蟲,抓取三方新聞和諮訊等內容 - 有使用者使用
laf
雲函式做 webhook,監聽 Git 倉庫提交訊息,推送到釘釘、企業微信群 - 有使用者使用
laf
雲函式做撥測,定時檢查線上服務的健康狀態 - ...
- 有使用者把
未來,
lafyun.com
會上線一個應用市場,彙總收集這些應用,讓laf
使用者一鍵即可使用海量應用 !
? 如何快速開始?
下面我們將在 lafyun.com 上,通過開發一個簡單的「使用者登入/註冊」的功能,快速體驗 laf
雲開發。
準備工作
- 你需要在 lafyun.com 上註冊一個賬戶;
- 登入到 lafyun.com 控制檯 ,點選左上角的
新建
按鈕,建立一個空應用; - 待應用成功啟動後,點選右側 「開發」 按鈕,進入應用的「開發控制檯」,接下來,我們將在「開發控制檯」 進行第一個
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 過於強悍,你們不再需要折騰基礎架構和後端服務,很可能會因為工作量不飽和而面臨被裁的風險!注意控制風險!