為什么應該用Ballerina編程?
譯文雖然可以使用任何編程語言編寫API,但開發(fā)人員在創(chuàng)建新API、使用已經(jīng)存在的API時面臨許多挑戰(zhàn)。此外,企業(yè)集成仍頗具挑戰(zhàn)性。
集成編程實踐已變得很孤立,使用青睞的集成工具進行編程的開發(fā)人員必須使用另一種工具或編程語言開發(fā)其余應用程序。除此之外,向云轉(zhuǎn)變意味著團隊現(xiàn)在必須在容器中部署集成系統(tǒng),并使用分布在大量節(jié)點上的微服務創(chuàng)建應用程序。
現(xiàn)有的編程語言并不特別擅長理解這些問題以及團隊試圖所做的工作。它們根本不是為云而構建的。而Ballerina是一種面向云原生編程和集成的開源語言,為致力于針對網(wǎng)絡交互創(chuàng)建新API、新集成和新邏輯的開發(fā)人員提供了一系列合適的工具和抽象級別。
憑借用于開發(fā)服務和API的語法、JSON支持以及內(nèi)置并發(fā),新的正式版Swan Lake可以進一步簡化開發(fā)人員構建和部署云原生應用程序的方式。
以下是開發(fā)人員應選擇Ballerina為其云原生應用程序編寫API、集成和后端邏輯的主要原因。
Ballerina面向數(shù)據(jù)和網(wǎng)絡
由于云端服務越來越多,幾乎每個企業(yè)應用程序都需要網(wǎng)絡調(diào)用。對于開發(fā)人員來說,這加大了處理其代碼中的資源方面的責任。Ballerina隨帶對網(wǎng)絡友好的類型系統(tǒng),有強大的功能來處理網(wǎng)絡上的數(shù)據(jù)。
Ballerina可以輕松地為數(shù)據(jù)建模,并通過網(wǎng)絡來回傳送。該語言有強大的工具來編寫、聲明、處理、查詢、結構化、重組和導航數(shù)據(jù)。
importballerina/http;
importballerina/io;
typeCountryrecord {
stringcountry;
intpopulation;
stringcontinent;
intcases;
intdeaths;
};
// Prints the top 10 countries having the highest case-fatality ratio.
publicfunctionmain() returnserror? {
http:ClientdiseaseEp = checknew ("https://disease.sh/v3");
Country[] countries = checkdiseaseEp->get("/covid-19/countries");
jsonsummary =
fromvar {country, continent, population, cases, deaths} incountries
wherepopulation >= 100000 && deaths >= 100
letdecimalcaseFatalityRatio = <decimal>deaths / <decimal>cases *
100
orderbycaseFatalityRatiodescending
limit10
select {country, continent, population, caseFatalityRatio};
io:println(summary);
}
具有靈活類型系統(tǒng)的優(yōu)點
編程語言的類型系統(tǒng)是表示數(shù)據(jù)和實現(xiàn)邏輯的基礎。雖然開發(fā)人員必須處理其代碼中的網(wǎng)絡資源,但編程語言本身必須在該操作中提供幫助。這就是為什么Ballerina專門適用于對網(wǎng)絡友好的類型系統(tǒng)。
比如在典型的編程語言中,有一些標準和協(xié)議來定義如何處理通過網(wǎng)絡傳輸?shù)臄?shù)據(jù),并將其綁定到語言(數(shù)據(jù)綁定)。收到數(shù)據(jù)后,開發(fā)人員必須將數(shù)據(jù)綁定到語言中的數(shù)據(jù)結構,才能對其進行操作。
Ballerina的類型系統(tǒng)不僅能描述內(nèi)存中的數(shù)據(jù),還能描述網(wǎng)絡上的數(shù)據(jù)。尤其是,為了與JSON、XML及其他格式緊密結合,開發(fā)者做了大量工作。數(shù)據(jù)通過網(wǎng)絡傳輸時,開發(fā)人員可以將其引入語言中,沒有任何人為的、復雜的數(shù)據(jù)綁定問題,實際上擯棄了眾所周知的數(shù)據(jù)格式和網(wǎng)絡數(shù)據(jù)結構中的數(shù)據(jù)綁定概念。
Ballerina的類型系統(tǒng)主要是結構化的,增加了對名義類型的支持。這意味著類型兼容性通過考慮值的結構而不是僅僅依賴類型名稱來識別。這有別于Java、C++和C#等擁有類型系統(tǒng)的語言,這些系統(tǒng)中受實際類型名稱的約束。
序列圖模型網(wǎng)絡交互
在Ballerina中,每個程序都可以顯示為自動表明分布式并發(fā)交互的序列圖。Ballerina程序中的函數(shù)在文本語法和序列圖中都有等效的表示。您可以在這兩個視圖之間無縫切換。 Ballerina獨特的圖形視圖不是一種噱頭,而是被設計到語言底層中,以便用戶切實深入了解函數(shù)的網(wǎng)絡交互及并發(fā)機制的使用。
importballerina/http;
importballerinax/googleapis.sheets;
configurablestringgithubPAT = ?;
configurablestringrepository = "ballerina-platform/ballerina-lang";
configurablestringsheetsAccessToken = ?;
configurablestringspreadSheetId = ?;
configurablestringsheetName = "Sheet1";
typePRrecord {
stringurl;
stringtitle;
stringstate;
stringcreated_at;
stringupdated_at;
};
publicfunctionmain() returnserror? {
http:Clientgithub = checknew ("https://api.github.com/repos");
map<string> headers = {
"Accept": "application/vnd.github.v3+json",
"Authorization": "token " + githubPAT
};
PR[] prs = checkgithub->get(string`/${repository}/pulls`, headers);
sheets:Clientgsheets = checknew ({auth: {token: sheetsAccessToken}});
checkgsheets->appendRowToSheet(spreadSheetId, sheetName,
["Issue", "Title", "State", "Created At", "Updated At"]);
foreach var {url, title, state, created_at, updated_at} inprs {
checkgsheets->appendRowToSheet(spreadSheetId, sheetName,
[url, title, state, created_at, updated_at]);
}
}
雖然Ballerina具有現(xiàn)代編程語言的所有通用功能,但它之所以脫穎而出,是由于提供了更易于使用、為云組合和創(chuàng)建網(wǎng)絡服務的語言功能。如需深入了解Ballerina語言功能的介紹性說明,建議觀看該語言的開發(fā)者??Sanjiva Weerawarana的視頻???,或者參閱該??博客??。
原文標題:??Why Should You Program with Ballerina???,作者:Vishva Ahangama