云開發(fā)中的戰(zhàn)斗機 Laf,讓你像寫博客一樣寫代碼

各位云原生搬磚師 and PPT 架構(gòu)師,你們有沒有想過像寫文章一樣方便地寫代碼呢?
怎樣才能像寫文章一樣寫代碼??理想的需求應(yīng)該是可以在線編寫、調(diào)試函數(shù),不用重啟服務(wù),隨時隨地在 Web 上查看函數(shù)的運行日志,無需連接服務(wù)器,無需折騰數(shù)據(jù)庫、對象存儲、Nginx 等,可以隨時隨地上線應(yīng)用,招之即來,揮之即去,隨手發(fā)布!
這時候懂王上線了,好家伙,這不就是 Serverless 嘛,Serverless 的愿景是用戶只需專注開發(fā)意圖,編寫函數(shù)代碼,并上傳到代碼倉庫,其他的東西不需要關(guān)心,Serverless 平臺會自動分配計算資源,并按需運行函數(shù)。
你懂的真多,可惜啊,僅有 Serverless 還滿足不了上述需求。
要想像寫文章一樣寫代碼,除了需要 Serverless 來提供函數(shù)計算服務(wù)之外,還需要以下幾個必備條件:
云數(shù)據(jù)庫:為應(yīng)用開發(fā)提供開箱即用的數(shù)據(jù)庫服務(wù); 云存儲:為應(yīng)用開發(fā)提供專業(yè)的文件對象存儲服務(wù),兼容 S3 和其他存儲服務(wù)接口; WebIDE:在線寫代碼,完善的類型提示、代碼自動完成,隨手發(fā)布上線!
懂王又上線了,這個我也懂,騰訊云開發(fā)、Google Firebase 以及 UniCloud 就提供這樣的功能。
如果我告訴你現(xiàn)在有一個平臺已經(jīng)俱備了上述的所有條件,而且完全開源,每個開發(fā)團隊都可以隨時擁有一個自己的云開發(fā)平臺,你會不會內(nèi)心狂喜?
是的,這個平臺就是 Laf。
人生苦短,前端用 Laf,后端用 Laf,云開發(fā)用戶用 Laf,獨立開發(fā)者用 Laf,初創(chuàng)團隊用 Laf,我也用 Laf。上鏈接??:
https://github.com/labring/laf
值得一提的是,Laf 在上周五一天內(nèi) Star 數(shù)量增長了近?300 個,并且后續(xù)連續(xù)幾天的 Star 數(shù)量呈垂直上升,簡直就是簡直了。

?? Laf 是什么?
Laf 本質(zhì)上是一個集「函數(shù)計算」、「數(shù)據(jù)庫」、「對象存儲」等于一身的一站式開發(fā)平臺,可以快速的開發(fā)并發(fā)布應(yīng)用。它包含了以下幾個功能:
云函數(shù)
云函數(shù)是運行在云端的 JavaScript 代碼,熟悉 Node.js 的開發(fā)者可以直接上手。
云函數(shù)也可以使用 Typescript 編寫,無需管理服務(wù)器,在開發(fā)控制臺在線編寫、在線調(diào)試、一鍵保存即可運行后端代碼。
在你的應(yīng)用中,大多數(shù)數(shù)據(jù)的獲取都可在客戶端直接操作數(shù)據(jù)庫,但是通常業(yè)務(wù)中會使用到「非數(shù)據(jù)庫操作」,如注冊、登錄、文件操作、事務(wù)、第三方接口等,可直接使用云函數(shù)實現(xiàn)。
詳情請查看云函數(shù)的文檔[1]。

云數(shù)據(jù)庫
前端可使用 laf-client-sdk “直連”云數(shù)據(jù)庫,無需與服務(wù)端對接口。
通過在開發(fā)控制臺,配置相應(yīng)的訪問策略,也可以實現(xiàn)客戶端安全操作數(shù)據(jù)庫。
詳情請查看云數(shù)據(jù)庫的文檔[2]。

云存儲
laf 云存儲是基礎(chǔ) MinIO 提供的對象存儲服務(wù),laf 提供了完全兼容 MinIO (aws s3-api) 的對象存儲服務(wù), 在 laf oss 文檔上線之前,開發(fā)者完全可參考 MinIO 的文檔來使用 laf oss。

靜態(tài)托管
laf 支持靜態(tài)網(wǎng)站的托管,可以快速的上線靜態(tài)網(wǎng)站,無需折騰 Nginx。
????? 誰適合使用 Laf ?
前端開發(fā)者 +?
laf?= 全棧開發(fā)者,前端秒變?nèi)珬?,成為真正的大前端?/p>laf?為前端提供了?laf-client-sdk[3],適用于任何 js 運行環(huán)境;laf?云函數(shù)使用 js/ts 開發(fā),前后端代碼無隔裂,無門檻快速上手;laf?提供了靜態(tài)網(wǎng)站托管,可將前端構(gòu)建的網(wǎng)頁直接同步部署上來,無需再配置服務(wù)器、Nginx、域名等;laf?后續(xù)會提供多種客戶端的 SDK(Flutter/Android/iOS 等),為所有客戶端開發(fā)者提供后端開發(fā)服務(wù)和一致的開發(fā)體驗。后端開發(fā)者,可以從瑣事中解放出來,專注于業(yè)務(wù)本身,提升開發(fā)效率。
laf?可以節(jié)約服務(wù)器運維、多環(huán)境部署和管理精力;laf?可以讓你告別配置、調(diào)試 Nginx;laf?可以讓你告別「為每個項目手動部署數(shù)據(jù)庫、安全顧慮等重復(fù)性工作」;laf?可以讓你告別「修改一次、發(fā)布半天」的重復(fù)繁瑣的迭代體驗;laf?可以讓你隨時隨地在 Web 上查看函數(shù)的運行日志,不必再連接服務(wù)器,費神費眼翻找;laf?可以讓你「像寫博客一樣寫一個函數(shù)」,招之即來,揮之即去,隨手發(fā)布!云開發(fā)用戶,若你是微信云開發(fā)用戶,你不僅可以獲得更強大、快速的開發(fā)體驗,還不被微信云開發(fā)平臺鎖定。
你可以為客戶提供源碼交付,為客戶私有部署一套? laf?+ 你的云開發(fā)應(yīng)用,而使用閉源的云開發(fā)服務(wù),無法交付可獨立運行的源碼;你可以根據(jù)未來的需要,隨時將自己的產(chǎn)品部署到自己的服務(wù)器上, laf?是開源免費的;你甚至可以修改、訂制自己的云開發(fā)平臺, laf?是開源的、高度可擴展的。Node.js 開發(fā)者,
laf?是使用 Node.js 開發(fā)的,你可以把?laf?當(dāng)成一個更方便的 Node.js 開發(fā)平臺 or 框架。你可以在線編寫、調(diào)試函數(shù),不用重啟服務(wù),一鍵發(fā)布即可用; 你可以在線查看、檢索函數(shù)調(diào)用日志; 你可以不必折騰數(shù)據(jù)庫、對象存儲、Nginx,隨時隨地讓你的應(yīng)用上線; 你可以隨手將一段 Node.js 代碼上云,比如一段爬蟲,一段監(jiān)控代碼,像寫博客一樣寫 Node! 獨立開發(fā)者、初創(chuàng)創(chuàng)業(yè)團隊, 節(jié)約成本,快速開始,專注業(yè)務(wù)。
減少啟動項目開發(fā)的流程,快速啟動,縮短產(chǎn)品驗證周期; 極大程度提高迭代速度,隨時應(yīng)對變化,隨時發(fā)布; 專注于產(chǎn)品業(yè)務(wù)本身,快速推出最小可用產(chǎn)品 (MVP),快速進行產(chǎn)品、市場驗證; 一個人 +? laf?= 團隊。
?? Laf 能用來做什么?
?
laf?是應(yīng)用的后端開發(fā)平臺,理論上可以做任何應(yīng)用!
使用 laf 快速開發(fā)微信小程序 / 公眾號:電商、社交、工具、教育、金融、游戲、短視頻、社區(qū)、企業(yè)等應(yīng)用!
微信小程序強要求 https 訪問,可直接使用 [lafyun.com];(http://www.lafyun.com "lafyun.com") 創(chuàng)建應(yīng)用,為小程序提供 https 的接口服務(wù); 可將應(yīng)用的 h5 頁面和管理端 (admin) 直接部署到可由? laf?靜態(tài)托管;將 h5 直接托管到? laf?上,將分配的專用域名配置到公眾號即可在線訪問;使用云函數(shù)實現(xiàn)微信授權(quán)、支付等業(yè)務(wù); 使用云存儲存儲視頻、頭像等用戶數(shù)據(jù)。 開發(fā) Android or iOS 應(yīng)用。
使用云函數(shù)、云數(shù)據(jù)庫、云存儲進行業(yè)務(wù)處理; 應(yīng)用的后端管理 (admin) 直接部署到可由? laf?靜態(tài)托管;可使用云函數(shù)實現(xiàn)微信授權(quán)、支付、熱更新等業(yè)務(wù)。 部署個人博客、企業(yè)官網(wǎng)。
將 vuepress / hexo / hugo 等靜態(tài)生成的博客,一鍵部署到? laf?靜態(tài)托管上, 見?laf-cli[4]可使用云函數(shù)來處理用戶留言、評論、訪問統(tǒng)計等業(yè)務(wù) 可使用云函數(shù)擴展博客的其它能力,如課程、投票、提問等 可使用云存儲存儲視頻、圖片 可使用云函數(shù)做爬蟲、推送等功能 企業(yè)信息化建設(shè):企業(yè)私有部署一套?
laf?云開發(fā)平臺快速開發(fā)企業(yè)內(nèi)部信息化系統(tǒng),可快速上線、修改、迭代,降成本 支持多應(yīng)用、多賬戶,不同部門、不同系統(tǒng),即可隔離,亦可連通 可借助? laf?社區(qū)生態(tài),直接使用現(xiàn)存的?laf?應(yīng)用,開箱即用,降成本laf?開源免費,沒有技術(shù)鎖定的顧慮,可自由訂制和使用個人開發(fā)者的「手邊云」
laf?讓開發(fā)者隨手寫的一段代碼,瞬間具備隨手上云的能力就像在你手機的備忘錄隨手敲下一段文字,自動同步到云端,且可被全網(wǎng)訪問和執(zhí)行 laf?是每個開發(fā)者的“爛筆頭”,像記事一樣寫個函數(shù)laf?是每個開發(fā)者的“私人助理”,比如隨時可以寫一個定時發(fā)送短信、郵件通知的函數(shù)其它
有用戶把? laf?云存儲當(dāng)網(wǎng)盤使用有用戶把? laf?應(yīng)用當(dāng)成一個日志服務(wù)器,收集客戶端日志數(shù)據(jù),使用云函數(shù)做分析統(tǒng)計有用戶用? laf?來跑爬蟲,抓取三方新聞和咨訊等內(nèi)容有用戶使用? laf?云函數(shù)做 webhook,監(jiān)聽 Git 倉庫提交消息,推送到釘釘、企業(yè)微信群有用戶使用? laf?云函數(shù)做撥測,定時檢查線上服務(wù)的健康狀態(tài)...
?未來,
lafyun.com?會上線一個應(yīng)用市場,匯總收集這些應(yīng)用,讓?laf?用戶一鍵即可使用海量應(yīng)用 !
?? 如何快速開始?
下面我們將在?lafyun.com[5]?上,通過開發(fā)一個簡單的「用戶登錄/注冊」的功能,快速體驗?laf?云開發(fā)。
準(zhǔn)備工作
你需要在?lafyun.com[6]?上注冊一個賬戶; 登錄到?lafyun.com[7]?控制臺 ,點擊左上角的? 新建?按鈕,創(chuàng)建一個空應(yīng)用;待應(yīng)用成功啟動后,點擊右側(cè) 「開發(fā)」 按鈕,進入應(yīng)用的「開發(fā)控制臺」,接下來,我們將在「開發(fā)控制臺」 進行第一個? laf?應(yīng)用的功能開發(fā)。
編寫云函數(shù)
本示例會編寫兩個云函數(shù):register?處理注冊請求,login處理登錄請求。
用戶注冊云函數(shù)
在「云函數(shù)」管理頁面,點擊 「新建函數(shù)」,創(chuàng)建注冊云函數(shù)?register。然后點擊?register?函數(shù)右側(cè)的 「開發(fā)」按鈕,進入 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?}
}
點擊右上角的 「顯示調(diào)試面板」(Ctrl/Cmd + B) 即可調(diào)試運行。

點擊 「保存」 & 「發(fā)布」 函數(shù)即發(fā)布上線!
用戶登錄云函數(shù)
同上,創(chuàng)建?login?云函數(shù),編寫以下代碼:
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
??}
}
點擊右上角的 「顯示調(diào)試面板」(Ctrl/Cmd + B) 即可調(diào)試運行。

點擊 「保存」 & 「發(fā)布」 函數(shù)即發(fā)布上線!
使用 curl 調(diào)用云函數(shù)
最后可以通過云函數(shù)列表頁面,查看 & 復(fù)制云函數(shù)的調(diào)用地址, 或?qū)⒁韵?curl 命令中的?APPID?替換成你的 APPID 后執(zhí)行:
#?注冊用戶
$?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 的歡迎頁面找到。

在前端項目中使用云函數(shù)
在你的前端項目中安裝 laf client sdk:
$?npm?install?laf-client-sdk
最后,可以在你的 Vue/React/Angular/小程序 頁面中調(diào)用這兩個云函數(shù)完成具體的登錄注冊功能!例如:
//?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
}
注意事項
我們可以在開發(fā)控制臺,查看云函數(shù)的調(diào)用日志,在線調(diào)試等; 如果調(diào)用返回 404,請檢查函數(shù)名是否拼寫錯誤,或者云函數(shù)是否已經(jīng)發(fā)布。
?? 總結(jié)
運維同學(xué)與后端同學(xué)請注意,由于 Laf 過于強悍,你們不再需要折騰基礎(chǔ)架構(gòu)和后端服務(wù),很可能會因為工作量不飽和而面臨被裁的風(fēng)險!注意控制風(fēng)險!
引用鏈接
云函數(shù)的文檔:?https://docs.lafyun.com/guide/function/
[2]云數(shù)據(jù)庫的文檔:?https://docs.lafyun.com/guide/db/
[3]laf-client-sdk:?https://github.com/labring/laf/tree/main/packages/client-sdk
[4]laf-cli:?https://github.com/labring/lafcli
[5]lafyun.com:?https://www.lafyun.com
[6]lafyun.com:?https://www.lafyun.com
[7]lafyun.com:?https://www.lafyun.com
推薦閱讀
你好,我是程序猿DD,10年開發(fā)老司機、阿里云MVP、騰訊云TVP、出過書創(chuàng)過業(yè)、國企4年互聯(lián)網(wǎng)6年。從普通開發(fā)到架構(gòu)師、再到合伙人。一路過來,給我最深的感受就是一定要不斷學(xué)習(xí)并關(guān)注前沿。只要你能堅持下來,多思考、少抱怨、勤動手,就很容易實現(xiàn)彎道超車!所以,不要問我現(xiàn)在干什么是否來得及。如果你看好一個事情,一定是堅持了才能看到希望,而不是看到希望才去堅持。相信我,只要堅持下來,你一定比現(xiàn)在更好!如果你還沒什么方向,可以先關(guān)注我,這里會經(jīng)常分享一些前沿資訊,幫你積累彎道超車的資本。
