虽然可以使用任何编程语言编写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