SlideShare ist ein Scribd-Unternehmen logo
1 von 54
Downloaden Sie, um offline zu lesen
Re-inventing middleware in a programming language
September 2019
Dr. Paul Fremantle, CTO and Co-Founder, WSO2
@pzfreo #ballerinalang
(Almost)
Every programmer is
using and/or creating
APIs
Existing languages treat the
network as simply I/O
Ballerina treats APIs, listeners,
endpoints, network types as first
class entities
Ballerina is a modern, compiled, type safe,
concurrent programming language
Open Source implementations,
Apache Licensed
Open Specification,
Creative Commons Licensed
Hello World
caller hello
GET
Hello World
Annotations
caller hello
POST (name)
Hello, name!
caller hello
POST (status)
response
twitter
tweet (status)
response
○ Built in taint analysis
○ Built in API Gateway (JWT and OAuth)
○ Research on embedding SPIFFE into the language
○ First-class integration with Istio / Envoy
More info here:
https://github.com/prabath/ballerina-security
Based on sequence diagrams
○ A type defined by union of two or more other types
float | string v1 = "John";
float | string v2 = 457.68;
float | string
0.51
1.01
457.68
-11.0
“John”
“name”
“”
“bal”
// The return type of 'post' is a union of 'http:Response' and 'error'
http:Response | error response = orderEP -> post("/create", reqPayload)
json is just a union - () | int | float | string | map<json> | json[]
// JSON object
json payload = { "orderdata": { "id": 1, "name": "XYZ", "price": 2500 } };
//Access object values
json orderid = payload.orderdata.id;
//JSON arrays
json orders = {
"orderdata": [
{ "id": 1, "name": "XYZ", "price": 2500 },
{ "id": 2, "name": "ABC", "price": 3000 }
]
};
// Simple XML literal
xml x1 = xml`<name>Paul Fremantle</name>`;
// XML with namespaces
xmlns "http://wso2.com" as ns0;
xml x2 = xml `<name id="123" status="married">
<ns0:fname>Paul</ns0:fname>
<ns0:lname>Fremantle</ns0:lname>
</name>`;
// XML literal with interpolation
string lastName = "Fremantle";
xml x3 = xml`<lname>${lastName}</lname>`;
// Concat XML values
xml x4 = x1 + x2 + x3;
Cloud native
Concurrency
future<int> f = start add( 2,2);
if (f.isDone()) {
int result = wait f;
io:println(result);
}
else if (f.isCancelled())
{
io:println("cancelled");
}
else
{
io:print("cancelling: ");
io:println(f.cancel());
}
Batteries included
○ Test
○ Documentation
○ Swagger tooling
○ gRPC tooling
○ Secret encryption
○ Docker / Kubernetes integration
○ Istio integration
Serverless
Observability
Continuous Integration
OpenAPI / Swagger
$ ballerina openapi gen-contract hello -i demo.bal
Note: This is an Experimental tool shipped under
ballerina hence this will only support limited set
of functionality.
Successfully generated the ballerina contract at
location
/Users/paul/10demo/hello.openapi.yaml
gRPC and ProtoBuf
Ballerina syntax
Automatically creates this .proto
My setup
● Ballerina 1.0.0
○ Tested this morning :-)
● Docker
○ 2.1.1.0 edge
○ Kubernetes: v1.14.3
● Visual Studio Code 1.38
● Ballerina vscode plugin
https://ballerina.io/learn/by-example/
https://github.com/ballerina-platform/ballerina-spec
○ Join the Ballerina Hackathon
○ Write your first Ballerina program
○ Help us bridge Ballerina with your Apache project
○ Come to https://ballerina.io
○ Join the slack channel and/or ballerina-dev mailing list
○ Create a package
○ A connector to your Apache project!
○ Create issues
○ On the spec or implementation
○ If you have compiler skills, submit PRs on nBallerina or jBallerina
Homepage https://ballerina.io/
Downloads https://ballerina.io/downloads/
Ballerina By Example https://ballerina.io/learn/by-example/
Github https://github.com/ballerina-platform/ballerina-lang

Weitere ähnliche Inhalte

Was ist angesagt?

Twisted: a quick introduction
Twisted: a quick introductionTwisted: a quick introduction
Twisted: a quick introductionRobert Coup
 
Dive into Fluentd plugin v0.12
Dive into Fluentd plugin v0.12Dive into Fluentd plugin v0.12
Dive into Fluentd plugin v0.12N Masahiro
 
Ethereum dapps20180120
Ethereum dapps20180120Ethereum dapps20180120
Ethereum dapps20180120Hu Kenneth
 
Asynchronous Python A Gentle Introduction
Asynchronous Python A Gentle IntroductionAsynchronous Python A Gentle Introduction
Asynchronous Python A Gentle IntroductionPyData
 
Distributed app development with nodejs and zeromq
Distributed app development with nodejs and zeromqDistributed app development with nodejs and zeromq
Distributed app development with nodejs and zeromqRuben Tan
 
Network programming Using Python
Network programming Using PythonNetwork programming Using Python
Network programming Using PythonKarim Sonbol
 
Life of an Fluentd event
Life of an Fluentd eventLife of an Fluentd event
Life of an Fluentd eventKiyoto Tamura
 
#Pharo Days 2016 Reflectivity
#Pharo Days 2016 Reflectivity#Pharo Days 2016 Reflectivity
#Pharo Days 2016 ReflectivityPhilippe Back
 
An Introduction to Twisted
An Introduction to TwistedAn Introduction to Twisted
An Introduction to Twistedsdsern
 
#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and Protocols#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and ProtocolsPhilippe Back
 
Asynchronous Python with Twisted
Asynchronous Python with TwistedAsynchronous Python with Twisted
Asynchronous Python with TwistedAdam Englander
 
Going real time with Socket.io
Going real time with Socket.ioGoing real time with Socket.io
Going real time with Socket.ioArnout Kazemier
 
WTF is Twisted?
WTF is Twisted?WTF is Twisted?
WTF is Twisted?hawkowl
 

Was ist angesagt? (20)

Twisted: a quick introduction
Twisted: a quick introductionTwisted: a quick introduction
Twisted: a quick introduction
 
Scapy talk
Scapy talkScapy talk
Scapy talk
 
Core OS
Core OSCore OS
Core OS
 
Build dapps 1:3 dev tools
Build dapps 1:3 dev toolsBuild dapps 1:3 dev tools
Build dapps 1:3 dev tools
 
Dive into Fluentd plugin v0.12
Dive into Fluentd plugin v0.12Dive into Fluentd plugin v0.12
Dive into Fluentd plugin v0.12
 
Ethereum dapps20180120
Ethereum dapps20180120Ethereum dapps20180120
Ethereum dapps20180120
 
Common Node
Common NodeCommon Node
Common Node
 
Asynchronous Python A Gentle Introduction
Asynchronous Python A Gentle IntroductionAsynchronous Python A Gentle Introduction
Asynchronous Python A Gentle Introduction
 
Distributed app development with nodejs and zeromq
Distributed app development with nodejs and zeromqDistributed app development with nodejs and zeromq
Distributed app development with nodejs and zeromq
 
Network programming Using Python
Network programming Using PythonNetwork programming Using Python
Network programming Using Python
 
Life of an Fluentd event
Life of an Fluentd eventLife of an Fluentd event
Life of an Fluentd event
 
#Pharo Days 2016 Reflectivity
#Pharo Days 2016 Reflectivity#Pharo Days 2016 Reflectivity
#Pharo Days 2016 Reflectivity
 
Ecma script
Ecma scriptEcma script
Ecma script
 
Kafka Workshop
Kafka WorkshopKafka Workshop
Kafka Workshop
 
An Introduction to Twisted
An Introduction to TwistedAn Introduction to Twisted
An Introduction to Twisted
 
#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and Protocols#Pharo Days 2016 Data Formats and Protocols
#Pharo Days 2016 Data Formats and Protocols
 
Asynchronous Python with Twisted
Asynchronous Python with TwistedAsynchronous Python with Twisted
Asynchronous Python with Twisted
 
Intro dotnet
Intro dotnetIntro dotnet
Intro dotnet
 
Going real time with Socket.io
Going real time with Socket.ioGoing real time with Socket.io
Going real time with Socket.io
 
WTF is Twisted?
WTF is Twisted?WTF is Twisted?
WTF is Twisted?
 

Ähnlich wie [ApacheCon NA 2019] Re-inventing Middleware in a Programming Language

Ähnlich wie [ApacheCon NA 2019] Re-inventing Middleware in a Programming Language (20)

[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
[WSO2 Integration Summit New York 2019] Ballerina - Cloud Native Middleware a...
 
ReactPHP
ReactPHPReactPHP
ReactPHP
 
Getting groovy (ODP)
Getting groovy (ODP)Getting groovy (ODP)
Getting groovy (ODP)
 
What`s new in Java 7
What`s new in Java 7What`s new in Java 7
What`s new in Java 7
 
File handling-c
File handling-cFile handling-c
File handling-c
 
Unit5 C
Unit5 C Unit5 C
Unit5 C
 
Introduction to Perl Programming
Introduction to Perl ProgrammingIntroduction to Perl Programming
Introduction to Perl Programming
 
File in C language
File in C languageFile in C language
File in C language
 
File management
File managementFile management
File management
 
file_handling_in_c.ppt
file_handling_in_c.pptfile_handling_in_c.ppt
file_handling_in_c.ppt
 
Concept of file handling in c
Concept of file handling in cConcept of file handling in c
Concept of file handling in c
 
Unit VI
Unit VI Unit VI
Unit VI
 
Introduction to Functional Programming
Introduction to Functional ProgrammingIntroduction to Functional Programming
Introduction to Functional Programming
 
Unit5
Unit5Unit5
Unit5
 
My cool new Slideshow!
My cool new Slideshow!My cool new Slideshow!
My cool new Slideshow!
 
slidesharenew1
slidesharenew1slidesharenew1
slidesharenew1
 
Php mysql
Php mysqlPhp mysql
Php mysql
 
File handling in 'C'
File handling in 'C'File handling in 'C'
File handling in 'C'
 
Lk module4 file
Lk module4 fileLk module4 file
Lk module4 file
 
JavaFXScript
JavaFXScriptJavaFXScript
JavaFXScript
 

Mehr von Ballerinalang

Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021
Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021
Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021Ballerinalang
 
Managing dependencies in ballerina
Managing dependencies in ballerinaManaging dependencies in ballerina
Managing dependencies in ballerinaBallerinalang
 
[Ballerina Community Call] Language Integrated Queries
[Ballerina Community Call] Language Integrated Queries[Ballerina Community Call] Language Integrated Queries
[Ballerina Community Call] Language Integrated QueriesBallerinalang
 
[Community Call] Ballerina Swan Lake HTTP Module Changes
[Community Call]  Ballerina Swan Lake HTTP Module Changes[Community Call]  Ballerina Swan Lake HTTP Module Changes
[Community Call] Ballerina Swan Lake HTTP Module ChangesBallerinalang
 
Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...
Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...
Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...Ballerinalang
 
[GID Live] Automatic Microservices Observability with Ballerina
[GID Live] Automatic Microservices Observability with Ballerina[GID Live] Automatic Microservices Observability with Ballerina
[GID Live] Automatic Microservices Observability with BallerinaBallerinalang
 
[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming Language[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming LanguageBallerinalang
 
[Ballerina Community Call] Services and Network Communication Updates in Swan...
[Ballerina Community Call] Services and Network Communication Updates in Swan...[Ballerina Community Call] Services and Network Communication Updates in Swan...
[Ballerina Community Call] Services and Network Communication Updates in Swan...Ballerinalang
 
[Ballerina Community Call] Java Interoperability
[Ballerina Community Call] Java Interoperability[Ballerina Community Call] Java Interoperability
[Ballerina Community Call] Java InteroperabilityBallerinalang
 
[Ballerina Community Call] Data Access in Ballerina
[Ballerina Community Call] Data Access in Ballerina[Ballerina Community Call] Data Access in Ballerina
[Ballerina Community Call] Data Access in BallerinaBallerinalang
 
Code to Kubernetes: Languages of Infrastructure
Code to Kubernetes: Languages of InfrastructureCode to Kubernetes: Languages of Infrastructure
Code to Kubernetes: Languages of InfrastructureBallerinalang
 
[Cloud DC Meetup] Cloud Native Development with Ballerina
[Cloud DC Meetup] Cloud Native Development with Ballerina[Cloud DC Meetup] Cloud Native Development with Ballerina
[Cloud DC Meetup] Cloud Native Development with BallerinaBallerinalang
 
[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...
[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...
[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...Ballerinalang
 
[DevOps Pro Europe 2020] From Code to Cloud
[DevOps Pro Europe 2020] From Code to Cloud[DevOps Pro Europe 2020] From Code to Cloud
[DevOps Pro Europe 2020] From Code to CloudBallerinalang
 
[DeveloperWeek 2020] Conquering Network Distributed Applications Using Ballerina
[DeveloperWeek 2020] Conquering Network Distributed Applications Using Ballerina[DeveloperWeek 2020] Conquering Network Distributed Applications Using Ballerina
[DeveloperWeek 2020] Conquering Network Distributed Applications Using BallerinaBallerinalang
 
[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...
[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...
[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...Ballerinalang
 
[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...
[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...
[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...Ballerinalang
 
[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...
[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...
[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...Ballerinalang
 
[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...
[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...
[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...Ballerinalang
 
[Java Colombo Meetup] The better java for Java microservices developers
[Java Colombo Meetup] The better java for Java microservices developers[Java Colombo Meetup] The better java for Java microservices developers
[Java Colombo Meetup] The better java for Java microservices developersBallerinalang
 

Mehr von Ballerinalang (20)

Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021
Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021
Building Real-time Systems with WebSub - Ballerina Community Call - 11/30/2021
 
Managing dependencies in ballerina
Managing dependencies in ballerinaManaging dependencies in ballerina
Managing dependencies in ballerina
 
[Ballerina Community Call] Language Integrated Queries
[Ballerina Community Call] Language Integrated Queries[Ballerina Community Call] Language Integrated Queries
[Ballerina Community Call] Language Integrated Queries
 
[Community Call] Ballerina Swan Lake HTTP Module Changes
[Community Call]  Ballerina Swan Lake HTTP Module Changes[Community Call]  Ballerina Swan Lake HTTP Module Changes
[Community Call] Ballerina Swan Lake HTTP Module Changes
 
Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...
Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...
Ballerina Community Call 8: Highlights of Ballerina Swan Lake and Introducing...
 
[GID Live] Automatic Microservices Observability with Ballerina
[GID Live] Automatic Microservices Observability with Ballerina[GID Live] Automatic Microservices Observability with Ballerina
[GID Live] Automatic Microservices Observability with Ballerina
 
[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming Language[GID Live] Open-Source Cloud-Native Programming Language
[GID Live] Open-Source Cloud-Native Programming Language
 
[Ballerina Community Call] Services and Network Communication Updates in Swan...
[Ballerina Community Call] Services and Network Communication Updates in Swan...[Ballerina Community Call] Services and Network Communication Updates in Swan...
[Ballerina Community Call] Services and Network Communication Updates in Swan...
 
[Ballerina Community Call] Java Interoperability
[Ballerina Community Call] Java Interoperability[Ballerina Community Call] Java Interoperability
[Ballerina Community Call] Java Interoperability
 
[Ballerina Community Call] Data Access in Ballerina
[Ballerina Community Call] Data Access in Ballerina[Ballerina Community Call] Data Access in Ballerina
[Ballerina Community Call] Data Access in Ballerina
 
Code to Kubernetes: Languages of Infrastructure
Code to Kubernetes: Languages of InfrastructureCode to Kubernetes: Languages of Infrastructure
Code to Kubernetes: Languages of Infrastructure
 
[Cloud DC Meetup] Cloud Native Development with Ballerina
[Cloud DC Meetup] Cloud Native Development with Ballerina[Cloud DC Meetup] Cloud Native Development with Ballerina
[Cloud DC Meetup] Cloud Native Development with Ballerina
 
[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...
[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...
[DevOps Pro Europe 2020] The Cloud-Native and DevOps Friendly Programming Lan...
 
[DevOps Pro Europe 2020] From Code to Cloud
[DevOps Pro Europe 2020] From Code to Cloud[DevOps Pro Europe 2020] From Code to Cloud
[DevOps Pro Europe 2020] From Code to Cloud
 
[DeveloperWeek 2020] Conquering Network Distributed Applications Using Ballerina
[DeveloperWeek 2020] Conquering Network Distributed Applications Using Ballerina[DeveloperWeek 2020] Conquering Network Distributed Applications Using Ballerina
[DeveloperWeek 2020] Conquering Network Distributed Applications Using Ballerina
 
[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...
[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...
[Cloud-Native and Kubernetes Meetup in Silicon Valley] Ballerina - Cloud Nati...
 
[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...
[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...
[Downtown San Jose DevOps Meetup] Ballerina - A Programming Language for Clou...
 
[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...
[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...
[DeveloperWeek Austin 2019] Microservices in Practice with Ballerina, Kuberne...
 
[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...
[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...
[ApacheCon NA 2019] Conquering Network Distributed Applications Using the Bal...
 
[Java Colombo Meetup] The better java for Java microservices developers
[Java Colombo Meetup] The better java for Java microservices developers[Java Colombo Meetup] The better java for Java microservices developers
[Java Colombo Meetup] The better java for Java microservices developers
 

Kürzlich hochgeladen

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 

Kürzlich hochgeladen (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 

[ApacheCon NA 2019] Re-inventing Middleware in a Programming Language

  • 1. Re-inventing middleware in a programming language September 2019 Dr. Paul Fremantle, CTO and Co-Founder, WSO2 @pzfreo #ballerinalang
  • 2.
  • 3.
  • 4. (Almost) Every programmer is using and/or creating APIs
  • 5. Existing languages treat the network as simply I/O Ballerina treats APIs, listeners, endpoints, network types as first class entities
  • 6. Ballerina is a modern, compiled, type safe, concurrent programming language Open Source implementations, Apache Licensed Open Specification, Creative Commons Licensed
  • 11.
  • 13. ○ Built in taint analysis ○ Built in API Gateway (JWT and OAuth) ○ Research on embedding SPIFFE into the language ○ First-class integration with Istio / Envoy More info here: https://github.com/prabath/ballerina-security
  • 14. Based on sequence diagrams
  • 15.
  • 16.
  • 17.
  • 18. ○ A type defined by union of two or more other types float | string v1 = "John"; float | string v2 = 457.68; float | string 0.51 1.01 457.68 -11.0 “John” “name” “” “bal” // The return type of 'post' is a union of 'http:Response' and 'error' http:Response | error response = orderEP -> post("/create", reqPayload)
  • 19.
  • 20. json is just a union - () | int | float | string | map<json> | json[] // JSON object json payload = { "orderdata": { "id": 1, "name": "XYZ", "price": 2500 } }; //Access object values json orderid = payload.orderdata.id; //JSON arrays json orders = { "orderdata": [ { "id": 1, "name": "XYZ", "price": 2500 }, { "id": 2, "name": "ABC", "price": 3000 } ] };
  • 21. // Simple XML literal xml x1 = xml`<name>Paul Fremantle</name>`; // XML with namespaces xmlns "http://wso2.com" as ns0; xml x2 = xml `<name id="123" status="married"> <ns0:fname>Paul</ns0:fname> <ns0:lname>Fremantle</ns0:lname> </name>`; // XML literal with interpolation string lastName = "Fremantle"; xml x3 = xml`<lname>${lastName}</lname>`; // Concat XML values xml x4 = x1 + x2 + x3;
  • 23.
  • 25.
  • 26. future<int> f = start add( 2,2); if (f.isDone()) { int result = wait f; io:println(result); } else if (f.isCancelled()) { io:println("cancelled"); } else { io:print("cancelling: "); io:println(f.cancel()); }
  • 28.
  • 29. ○ Test ○ Documentation ○ Swagger tooling ○ gRPC tooling ○ Secret encryption ○ Docker / Kubernetes integration ○ Istio integration
  • 30.
  • 31.
  • 33.
  • 34.
  • 35.
  • 37.
  • 38.
  • 39.
  • 41.
  • 42.
  • 44. $ ballerina openapi gen-contract hello -i demo.bal Note: This is an Experimental tool shipped under ballerina hence this will only support limited set of functionality. Successfully generated the ballerina contract at location /Users/paul/10demo/hello.openapi.yaml
  • 47.
  • 48.
  • 49. My setup ● Ballerina 1.0.0 ○ Tested this morning :-) ● Docker ○ 2.1.1.0 edge ○ Kubernetes: v1.14.3 ● Visual Studio Code 1.38 ● Ballerina vscode plugin
  • 52.
  • 53. ○ Join the Ballerina Hackathon ○ Write your first Ballerina program ○ Help us bridge Ballerina with your Apache project ○ Come to https://ballerina.io ○ Join the slack channel and/or ballerina-dev mailing list ○ Create a package ○ A connector to your Apache project! ○ Create issues ○ On the spec or implementation ○ If you have compiler skills, submit PRs on nBallerina or jBallerina
  • 54. Homepage https://ballerina.io/ Downloads https://ballerina.io/downloads/ Ballerina By Example https://ballerina.io/learn/by-example/ Github https://github.com/ballerina-platform/ballerina-lang