為什么應該用Ballerina編程?
譯文雖然可以使用任何編程語言編寫API,但開發人員在創建新API、使用已經存在的API時面臨許多挑戰。此外,企業集成仍頗具挑戰性。
集成編程實踐已變得很孤立,使用青睞的集成工具進行編程的開發人員必須使用另一種工具或編程語言開發其余應用程序。除此之外,向云轉變意味著團隊現在必須在容器中部署集成系統,并使用分布在大量節點上的微服務創建應用程序。
現有的編程語言并不特別擅長理解這些問題以及團隊試圖所做的工作。它們根本不是為云而構建的。而Ballerina是一種面向云原生編程和集成的開源語言,為致力于針對網絡交互創建新API、新集成和新邏輯的開發人員提供了一系列合適的工具和抽象級別。
憑借用于開發服務和API的語法、JSON支持以及內置并發,新的正式版Swan Lake可以進一步簡化開發人員構建和部署云原生應用程序的方式。
以下是開發人員應選擇Ballerina為其云原生應用程序編寫API、集成和后端邏輯的主要原因。
Ballerina面向數據和網絡
由于云端服務越來越多,幾乎每個企業應用程序都需要網絡調用。對于開發人員來說,這加大了處理其代碼中的資源方面的責任。Ballerina隨帶對網絡友好的類型系統,有強大的功能來處理網絡上的數據。
Ballerina可以輕松地為數據建模,并通過網絡來回傳送。該語言有強大的工具來編寫、聲明、處理、查詢、結構化、重組和導航數據。
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);
}
具有靈活類型系統的優點
編程語言的類型系統是表示數據和實現邏輯的基礎。雖然開發人員必須處理其代碼中的網絡資源,但編程語言本身必須在該操作中提供幫助。這就是為什么Ballerina專門適用于對網絡友好的類型系統。
比如在典型的編程語言中,有一些標準和協議來定義如何處理通過網絡傳輸的數據,并將其綁定到語言(數據綁定)。收到數據后,開發人員必須將數據綁定到語言中的數據結構,才能對其進行操作。
Ballerina的類型系統不僅能描述內存中的數據,還能描述網絡上的數據。尤其是,為了與JSON、XML及其他格式緊密結合,開發者做了大量工作。數據通過網絡傳輸時,開發人員可以將其引入語言中,沒有任何人為的、復雜的數據綁定問題,實際上擯棄了眾所周知的數據格式和網絡數據結構中的數據綁定概念。
Ballerina的類型系統主要是結構化的,增加了對名義類型的支持。這意味著類型兼容性通過考慮值的結構而不是僅僅依賴類型名稱來識別。這有別于Java、C++和C#等擁有類型系統的語言,這些系統中受實際類型名稱的約束。
序列圖模型網絡交互
在Ballerina中,每個程序都可以顯示為自動表明分布式并發交互的序列圖。Ballerina程序中的函數在文本語法和序列圖中都有等效的表示。您可以在這兩個視圖之間無縫切換。 Ballerina獨特的圖形視圖不是一種噱頭,而是被設計到語言底層中,以便用戶切實深入了解函數的網絡交互及并發機制的使用。
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具有現代編程語言的所有通用功能,但它之所以脫穎而出,是由于提供了更易于使用、為云組合和創建網絡服務的語言功能。如需深入了解Ballerina語言功能的介紹性說明,建議觀看該語言的開發者??Sanjiva Weerawarana的視頻???,或者參閱該??博客??。
原文標題:??Why Should You Program with Ballerina???,作者:Vishva Ahangama