• Skip to primary navigation
  • Skip to main content
  • Skip to footer

Codemotion Magazine

We code the future. Together

  • Discover
    • Events
    • Community
    • Partners
    • Become a partner
    • Hackathons
  • Magazine
    • Backend
    • Dev community
    • Carriere tech
    • Intelligenza artificiale
    • Interviste
    • Frontend
    • DevOps/Cloud
    • Linguaggi di programmazione
    • Soft Skill
  • Talent
    • Discover Talent
    • Jobs
    • Manifesto
  • Companies
  • For Business
    • EN
    • IT
    • ES
  • Sign in
ads

gabroglioMaggio 15, 2024

Ballerina: il linguaggio dedicato all’integrazione tra i servizi

Linguaggi di programmazione
ballerina linguaggio di programmazione
facebooktwitterlinkedinreddit

Ballerina è un linguaggio di programmazione dedito allo sviluppo di integrazione tra servizi e dati, si basa su un linguaggio semplice supportato dalla possibilità di disegnare sequence diagram dell’applicativo stesso.

L’obbiettivo di Ballerina è quello di astrarre lo sviluppo di applicativi dalla piattaforma che li andranno a contenere, il gruppo di lavoro non si deve quindi occupare di gestire differenze strutturali per l’esecuzione degli applicativi o per l’interconnessione delle basi di dati, disaccoppiando questi elementi ci si può concentrare in maniera totale sui requisiti di business.

Recommended article
Maggio 7, 2025

Evitare la duplicazione del codice sfruttando le high-order function in JavaScript

Fabrizio Tedeschi

Fabrizio Tedeschi

Linguaggi di programmazione

Internet è diventato, nel corso degli anni, il modo migliore per distribuire dati. Il dato è diventato il core business delle aziende, la sua distribuzione in maniera sicura è una componente fondamentale richiesta in fase di sviluppo degli applicativi.

I dati vengono distribuiti tramite l’esposizione di API, le API sono uno standard per definire interfacce riguardanti i dati richiesti e forniti da uno specifico servizio. Quando uno sviluppatore si interfaccia tramite un’API non si chiede quale sia il linguaggio utilizzato per implementare il singolo servizio, il suo interesse principale è quello di fornire i dati come richiesto in input ed interpretare in maniera corretta le risposte ottenute.

L’obiettivo di Ballerina è proprio quello di dare agli sviluppatori un modo di interfacciarsi correttamente con le API esposte in modo da potersi concentrare in maniera pressoché totale sui requisiti di business.

Iniziamo da bal

Il primo approccio al linguaggio è dato dal comando bal, questo comando permette la gestione delle dipendenze e la fase di build, test ed esecuzione dell’applicativo. Dopo aver sviluppato l’applicazione nel linguaggio Ballerina, si può utilizzare il comando bal build per creare un pacchetto di distribuzione, o bal run per eseguire il codice direttamente dai sorgenti.

A chi volesse iniziare ad approcciare il linguaggio consiglio anche i comandi bal new che crea una struttura basilare di directory e files per il progetto che si vuole sviluppare ed il comando bal test per procedere a testare quanto implementato.

I pacchetti di Ballerina permetto di strutturare le attività di sviluppo in appositi task. Il comando bal permette di gestire i singoli pacchetti locali in base a quelli rilasciati nel repository centrale.

newCreate a Ballerina package. For more information, see Create a new package.
addAdd a new module to the current package.
graphPrint the dependency graph in the console.
searchSearch Ballerina Central for packages.
semverValidate SemVer compatibility of the local package changes against any previously published version(s) in Ballerina Central.
pullPull a package from Ballerina Central.
pushPublish a package to Ballerina Central. For more information, see Publish packages to Ballerina Central.
deprecateDeprecate a version of a package in Ballerina Central.

Integrazione al centro

Quante righe di codice sono necessarie per esporre un servizio REST? La risposta corretta è: dipende dal linguaggio e dalle librerie disponibili. Nel caso di Ballerina queste si riducono al minimo:
import ballerina/http;
è disponibile un package per la definizione dei servizi HTTP, quindi ci possiamo dedicare allo sviluppo del servizio stesso:
service / on httpListener {
resource function get someGetMethod() returns string {
// logica applicativa
return "Some value";
}

// URI var
resource function get someGetValue/[string value]() returns string {
return "Some " + value;
}
}

Questo appena proposto è essenzialmente un mockup, esattamente ciò di cui necessitiamo per i test. Con la documentazione Swagger/OpenApi a disposizione, possiamo rapidamente renderlo accessibile ai sistemi periferici e, internamente, concentrarci sullo sviluppo delle singole funzionalità (risorse) esposte.

Pronto all’uso

Integrarsi con il cloud significa implementare connettori che interagiscano con il parco di prodotti disponibili, prendiamo ad esempio l’esigenza di dover gestire i dati salvati all’interno di un account Google Drive, Ballerina mette a disposizione una libreria:
import ballerinax/trigger.google.drive;
che implementa i metodi onFileCreate, onFolderCreate, onFileUpdate, onFileUpdate, onFolderUpdate, onDelete, onFileTrash, onFolderTrash così da poter sottoscrivere ognuno degli eventi disponibili1.

In alternativa potremmo aver bisogno di creare un ordine tramite Paypal2
import ballerinax/paypal.orders;
o svariate altre esigenze che possono essere risolte velocemente attraverso le librerie messe a disposizione.

What you see is what you get

Una volta raccolti i requisiti di business occorre redigere la documentazione da condividere con gli sviluppatori che implementano il codice, questo normale processo porta naturalmente a creare un distacco tra quanto analizzato e quanto implementato.

L’integrazione di Ballerina con ide di sviluppo permette di avere costantemente la visibilità che quanto implementato corrisponda a quanto richiesto in fase di analisi. Si può partire dal disegno del sequence diagram che viene tradotto in codice Ballerina e successivamente verificare che i metodi scritti siano coerenti con quanto definito in fase di analisi.

E’ importante comprendere quanto esposto tramite questa immagine: il codice e la relativa rappresentazione in sequence diagram sono equivalenti, ogni modifica apportata ad una delle due componenti influisce sull’altra in quanto il disegno è il codice ed il codice è il disegno.

Integrazione con i progetti Java

Le organizzazioni hanno investito nel corso degli anni tempo e denaro per implementare applicativi sviluppati in Java, questi possono essere oggi dei programmi che richiedono una ristrutturazione per essere esposti come servizi REST tramite API e quindi interfacce standard.

La richiesta della maggior parte delle aziende è quella di poter riutilizzare quanto in loro possesso per evitare ulteriore esborso di capitali e per mantenere il know how degli applicativi stessi.

La struttura di Ballerina permette di integrarsi in maniera naturale con gli applicativi Java, anche se non si tratta di un linguaggio progettato per essere eseguito all’interno di una JVM, la sua implementazione fornisce piena aderenza alla semantica dei linguaggi.

E’ quindi possibile scrivere codice Ballerina per invocare in maniera nativa quanto già implementato in linguaggio Java. A supporto degli sviluppatori è stato rilasciato il tool Bindgen3 che permette di generare i bindings in linguaggio Ballerina per le relative classi Java.

Risposte alle esigenze di mercato

Ballerina propone alcuni costrutti che possono rispondere a casi d’uso o possono essere ispirazione per risolverne di più complessi. All’interno del proprio sito di documentazione sono descritti gli EIP4 e gli esempi di implementazione degli stessi.

Un esempio di risoluzione del pattern:

<strong>import ballerina/http;

type Approval record {
    TEAM_LEAD|MANAGER|SENIOR_MANAGER leadLevel;
    int score;
    int nextPromotionLevel;
};

const TEAM_LEAD = 1;
const MANAGER = 2;
const SENIOR_MANAGER = 3;

final map<Approval[]> incompleteApprovals = {};

final http:Client hrClient = check new ("http://api.wso2hr.com.balmock.io");

service /api/v1 on new http:Listener(8080) {

    resource function post employees/[string emoloyeeId]/approval(Approval approvalReq) returns error? {
        Approval[]? approvals = incompleteApprovals[emoloyeeId];
        if approvals == () {
            incompleteApprovals[emoloyeeId] = [approvalReq];
            return;
        }
        approvals.push(approvalReq);
        if approvals.length() < 3 {
            return;
        }
        from Approval approval in approvals
        order by approval.leadLevel
        do {
            _ = check hrClient->/promotions/employees/[emoloyeeId]/approval.post(approval, targetType = json);
        };
        _ = incompleteApprovals.remove(emoloyeeId);
    }
}</strong>Code language: HTML, XML (xml)

Vengono anche proposti use case di integrazione tra prodotti di mercato, un esempio di integrazione dati tra Google Sheets e Salesforce:

Curva di apprendimento

Quando si è iniziato a pensare a Ballerina uno degli obiettivi era proprio la volontà di proporre un prodotto di semplice utilizzo, per poter analizzare a fondo questo linguaggio in modo da esplorarne tutte funzionalità puoi contattarci direttamente in modo da avere un supporto alla risoluzione dei vari use case.

  1. Listener Google Drive: https://central.ballerina.io/ballerinax/trigger.google.drive/latest ↩︎
  2. Paypal order: https://central.ballerina.io/ballerinax/paypal.orders/latest ↩︎
  3. https://ballerina.io/learn/the-bindgen-tool/ ↩︎
  4. https://www.enterpriseintegrationpatterns.com/ ↩︎
Codemotion Collection Background
Dalla community
Selezionati per te

Vuoi scoprire più articoli come questo? Dai un’occhiata alla collection Dalla community dove troverai sempre nuovi contenuti selezionati dal nostro team.

Share on:facebooktwitterlinkedinreddit

Tagged as:API ballerina microservizi sviluppo software

gabroglio
Ricopro il ruolo di Platform Engineer presso Profesia, collaboro con le organizzazioni per definire le opportune scelte architetturali. Partendo dai requisiti di business lavoro per creare soluzioni efficienti ed estensibili nel tempo applicando gli opportuni pattern basati su standard e protocolli noti.
Ricetta pratica per Chatbot basato su Intelligenza Artificiale
Previous Post
ChatGPT 4o: Una panoramica completa per gli sviluppatori
Next Post

Footer

Discover

  • Events
  • Community
  • Partners
  • Become a partner
  • Hackathons

Magazine

  • Tech articles

Talent

  • Discover talent
  • Jobs

Companies

  • Discover companies

For Business

  • Codemotion for companies

About

  • About us
  • Become a contributor
  • Work with us
  • Contact us

Follow Us

© Copyright Codemotion srl Via Marsala, 29/H, 00185 Roma P.IVA 12392791005 | Privacy policy | Terms and conditions