譯者 | 胥磊
審校 | 孫淑娟
Serverless早期承諾之一就是更快的解決問(wèn)題,因?yàn)槟辉傩枰却罱ɑA(chǔ)設(shè)施就可以開始開發(fā)工作了。我是一年前在??changelog???上的一個(gè)播客中聽說(shuō)Dark的,并立即對(duì)它產(chǎn)生了興趣。Dark在2019年??亮相??之初就被稱為“一種用于構(gòu)建后端服務(wù)的整體編程語(yǔ)言,結(jié)構(gòu)化編輯器和基礎(chǔ)架構(gòu)”。雖然聽起來(lái)有點(diǎn)神秘,很明顯是為了談?wù)揜EST而設(shè)置的,換言之“Dark是一種構(gòu)建Serverless后端服務(wù)的新方法”。
Dark和薩爾薩舞課有點(diǎn)相似,你會(huì)覺得老師們都很棒而且非常有節(jié)奏感。處理HTTP和JSON和跳舞也沒什么區(qū)別,一樣有節(jié)奏和步驟。您發(fā)送一個(gè)請(qǐng)求,然后收到JSON格式的響應(yīng),這里面有些約定您已經(jīng)知道,有些您可以學(xué)習(xí)。對(duì)于本文我認(rèn)為您至少對(duì)音樂是熟悉的。
Dark操作界面的作用就是將一些單調(diào)乏味的交互自動(dòng)化,更重要的是您不必為此編寫任何代碼!某種程度上其為我們展現(xiàn)了一個(gè)不再需要編碼的未來(lái)發(fā)展趨勢(shì),而語(yǔ)音識(shí)別和完善的用戶界面使這種發(fā)展趨于大眾化。雖然這個(gè)未來(lái)還有些遙遠(yuǎn),但是能發(fā)現(xiàn)這種模式也是明智的。
現(xiàn)在讓我們直接進(jìn)入Dark的工作界面。您只需要在瀏覽器中基于您的用戶名簡(jiǎn)單聲明一個(gè)URL就可以立即創(chuàng)建一個(gè)畫布,隨后您就可以在上面開始工作了。下面我創(chuàng)建了一個(gè)“eastmad-thenewstack”的畫布,并在其上為“/greeting”端點(diǎn)寫了一個(gè) GET 響應(yīng)。
立即從“builtwithdark”域獲取到了響應(yīng)。
這是非常棒的并且響應(yīng)也很快。但我們要做的恰恰相反,用一個(gè)新的請(qǐng)求到一個(gè)沒有實(shí)現(xiàn)后端服務(wù)的終端:
回到我的畫布,Dark已經(jīng)將響應(yīng)跟蹤存儲(chǔ)為404列表了,這樣我們就可以快速使用它:
通過(guò)點(diǎn)擊GET旁邊那個(gè)+號(hào),我們將能夠用上面響應(yīng)”/greeting”的相同方式來(lái)響應(yīng)”/leaveing”的GET請(qǐng)求。這就是所謂的TDD( ??Trace Driven Development??,跟蹤驅(qū)動(dòng)開發(fā))。幾乎通過(guò)逆向工程跟蹤的工作都會(huì)讓您覺得有點(diǎn)像偵探 — 但我認(rèn)為這更像黑客,只不過(guò)我們監(jiān)視的是各種請(qǐng)求。
重新回到Dark,其現(xiàn)在已經(jīng)支持OAuth2,即資源所有者、客戶端應(yīng)用程序和以令牌語(yǔ)言表示的資源服務(wù)器之間的三向授權(quán)信任。Dark還提供了一個(gè)創(chuàng)建Slack APP后端服務(wù)的示例,一個(gè)可見的Slackbot。雖然示例復(fù)雜但讓我們有機(jī)會(huì)使用一些有用的技術(shù)組件,如OAuth。
即使您擁有Slack工作區(qū)的管理員權(quán)限,平臺(tái)的安全仍然得到謹(jǐn)慎的管理。通過(guò)快速瀏覽api.slack.com/app將向您展示一個(gè)“創(chuàng)建應(yīng)用”設(shè)置,通過(guò)查看基本屬性,您可以得到很多信息:
(注意:句號(hào)位于代表Client ID的數(shù)字中間位置,這表明其必須作為字符串進(jìn)行處理)
現(xiàn)在我們必須更多地了解Dark的復(fù)雜性。我們需要在 Slack 中創(chuàng)建一個(gè)重定向 URL,它將啟動(dòng)我們的跟蹤過(guò)程(查看“OAuth 和Permissions”)。
Dark 希望用戶使用“/oauth-redirect”作為到畫布的路徑,通過(guò)Slack去管理分發(fā)和復(fù)制可共享的URL。最后我們還需要有一些請(qǐng)求用來(lái)調(diào)用后端服務(wù),我們將通過(guò)點(diǎn)擊Dark的畫布來(lái)調(diào)用請(qǐng)求并開始追蹤。
實(shí)際上,它已經(jīng)在我們畫布的404列表中等待了,我們現(xiàn)在可以創(chuàng)建其對(duì) GET 的響應(yīng):
目前為止一切正常,我們已經(jīng)觸發(fā)了重定向并且可以看到Dark獲取的完整請(qǐng)求。那我們返回什么呢?從Slack上面,我們得到了“Client Id”和“Client Secret”,所以我們可以在Dark中創(chuàng)建一個(gè)POST并返回。
現(xiàn)在,我們需要?jiǎng)?chuàng)建一個(gè)POST報(bào)文主體,這里就是您需要考慮JSON格式化的地方—盡管Dark有些忽略這點(diǎn)。當(dāng)我們選擇發(fā)送響應(yīng)時(shí),Dark會(huì)像其他優(yōu)秀的IDE一樣把相關(guān)參數(shù)展示給我們。Slack API的URL,報(bào)文主體和兩組本身就是字典類型的鍵值對(duì)。
在示例中展示了報(bào)文主體的真實(shí)格式,其中client_id和client_secret 可以作為您能直接使用的字符串。
我們可以直接與Slack的OAuth API通信,需要注意的是“code”的值取自Dark收到的請(qǐng)求(在上圖的底部)并且支持JSON解析,所以您可以輸入“request.queryParams.code”。當(dāng)發(fā)送POST請(qǐng)求時(shí),我們希望得到的是正確的訪問(wèn)令牌。
本文到此將終止后續(xù)的跟蹤工作,如果您想繼續(xù)該示例,請(qǐng)按照上面的鏈接進(jìn)行后端演練,用以創(chuàng)建一個(gè)簡(jiǎn)單的Slackbot。上述工作無(wú)法確保每次都成功,但是一定會(huì)有反饋信息。所以即使失敗了也相當(dāng)有啟發(fā)性的。
結(jié)論
我們從中學(xué)到了什么呢?
- 智能的用戶界面可以很好地適用于熟悉的模式,那些IDE和靜態(tài)語(yǔ)言的用戶多年來(lái)一直在使用的模式。
- REST 仍然是實(shí)現(xiàn)和理解 API 的最好方式。更復(fù)雜的場(chǎng)景應(yīng)該鼓勵(lì)更多使用像Dark之類的工具協(xié)助探索服務(wù)產(chǎn)品。
- 在各種獨(dú)立的信任機(jī)構(gòu)或他們的模擬中工作是理解它的好方法,雖然它仍然很復(fù)雜。這就像拿著幾串叮當(dāng)響的鑰匙和門禁卡,但是仍然需要知道它們的使用順序。
- 不要停止實(shí)踐。
譯者介紹
胥磊,51CTO社區(qū)編輯,某頭部電商技術(shù)副總監(jiān),關(guān)注Java后端開發(fā),技術(shù)管理,架構(gòu)優(yōu)化,分布式開發(fā)等領(lǐng)域。
原文標(biāo)題:??How to Get Started Building Serverless Backends with Dark??,作者:David Eastman