SlideShare a Scribd company logo
Jose Nino
@junr03
Next Generation Client APIs
with Envoy Mobile
QCon London - March 2020
Some slides built in collaboration with: @goaway & @rebello95
InfoQ.com: News & Community Site
Watch the video with slide
synchronization on InfoQ.com!
https://www.infoq.com/presentations/
api-envoy/
• Over 1,000,000 software developers, architects and CTOs read the site world-
wide every month
• 250,000 senior developers subscribe to our weekly newsletter
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• 2 dedicated podcast channels: The InfoQ Podcast, with a focus on
Architecture and The Engineering Culture Podcast, with a focus on building
• 96 deep dives on innovative topics packed as downloadable emags and
minibooks
• Over 40 new content items per week
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon London
www.qconlondon.com
Server
Networking
Networking
Client
@rebello95
Server
Networking
Networking
Client
@junr03
API
Server
Networking
Networking
Server
@junr03
Server
Networking
Server
Networking
Server
Networking
Server
Networking Server
Networking
Server
Networking
Server
Networking
Server
Networking
Service
Networking
Networking
Server
@junr03
API
Server
Networking
Service
Networking
Server
Networking
Service
Networking Service
Networking
Service
Networking
Server
Networking
Server
Networking
Server
Networking Server
Networking
Server
Networking
Server
Networking
Server
Networking Server
Networking
Server
Networking
Server
Networking
Server
Networking Service
Networking
Server
Networking
Networking
Server
Networking Server
Networking
Server
Networking
Service
Networking
Networking
Server
@junr03
API
Server
Networking
Service
Networking
Server
Networking
Service
Networking Service
Networking
Service
Networking
Server
Networking
Server
Networking
Server
Networking Server
Networking
Server
Networking
Server
Networking
Server
Networking Server
Networking
Server
Networking
Server
Networking
Server
Networking Service
Networking
Server
Networking
Networking
Server
Networking Server
Networking
Server
Networking
��
��
��
��
��
��
Jose Nino
@junr03
Infrastructure Engineer
~4 years @
Service
Networking
Networking
Server
@junr03
API
Server
Networking
Service
Networking
Server
Networking
Service
Networking Service
Networking
Service
Networking
Server
Networking
Server
Networking
Server
Networking Server
Networking
Server
Networking
Server
Networking
Server
Networking Server
Networking
Server
Networking
Server
Networking
Server
Networking Service
Networking
Server
Networking
Networking
Server
Networking Server
Networking
Server
Networking
��
��
��
��
��
��
Server
Networking
Networking
Client
@junr03
API
We recognized two important dimensions
in API management: what data we send
(shape), and how we send it (transport).
@junr03
~3 years in Server Networking
Server-side Interface Definition Language (IDL)
Service A
“server”
@junr03
#service_a.proto
service ServiceA {
rpc UpdateA(ARequest) returns (AResponse) {
option (http.http_options).path = "/service_a";
option (http.http_options).method = "POST";
}
}
Service B
“client”
● Network Proxy driven by Open-source
(OSS) community
● Common substrate for network behavior
What is ?
@junr03
Sidecar
Service B
“client”
Sidecar
Service A
“server”
Storage
EdgeMobile Client
Sidecar
Service B
Sidecar
Service A
3rd-party
Strongly-typed APIs and a Universal Network Primitive
@junr03
(circa early 2019)
The End
@junr03
Storage
EdgeMobile Client
Sidecar
Service B
Sidecar
Service A
3rd-party��
Strongly-typed APIs and a Universal Network Primitive
@junr03
Three 9s of reliability at the server-side is
meaningless if the user of a mobile client is only
able to complete the desired product flows a fraction
of the time.
What do we want from our Client APIs?
@junr03
Consistency ? ✓
Performance ? ✓
Extensibility ? ✓
Resilience ? ✓
Security ? ✓
Observability ? ✓
Three 9s of reliability at the server-side is meaningless if the user of a mobile
client is only able to complete the desired product flows a fraction of the time.
What do we want from our Client APIs?
@junr03
Storage
Edge
Sidecar
Service B
Sidecar
Service A
3rd-party
Clients as another node in the mesh
Mobile Client
@goaway @junr03
API
Next generation Client APIs with Envoy Mobile
Mobile Client
@junr03
API
��
We recognized two important dimensions
in API management: what data we send
(shape), and how we send it (transport).
~1 year in Client Networking
We recognized two important dimensions
in API management: what data we send
(shape), and how we send it (transport).
@junr03
API Shape
Early API workflow at Lyft
Tech spec
handwritten.swift
handwritten.kt
handwritten.py/.go
@rebello95
iOS
Server
{
“key_a”: “hello”
}
Android
{
“kye_a”: “hello”
}
Programming errors
@rebello95
iOS
Server
{
“key_a”: “hello”
}
Android
{
“kye_a”: “hello”
}
Programming errors
@rebello95
iOS
Server
{
“key_a”: “hello”
}
Android
{
“kye_a”: “hello”
}
Programming errors
@rebello95 @junr03
��
iOS
Server
{
“key_a”: “hello”
}
Android
{
“kye_a”: “hello”
}
Programming errors
@rebello95 @junr03
iOS
Server
{
“key_a”: “hello”
}
Android
{
“kye_a”: “hello”
}
if (android):
else:
Programming errors
@rebello95
● Handwritten code led to mistakes/typos
● No visibility into deserialization failures at compile time
Problems
@rebello95 @junr03
YAML schema integration
@rebello95
paths:
/foo:
post:
parameters:
- in: body
schema:
$ref: '#/definitions/FooRequest'
responses:
200:
schema:
$ref: '#/definitions/FooResponse'
YAML definitions
@rebello95
● Manual code generation for Android
● No integration on iOS
● No single source of truth
YAML results
@rebello95
Consistency
@rebello95 @junr03
We needed a source of truth that
provided guarantees about the shape of
any given API.
Envisioned workflow
Tech spec IDL repo
foo_api.swift
foo_api.kt
foo_api.py/.go
foo_api.proto
@rebello95
● Platform-neutral IDL for defining and serializing strongly-typed APIs.
● JSON support (migration)
● Already used server-side (consistency)
Why protobuf?
@rebello95 @junr03
IDL pipeline
/api/v1/foo.proto
Generators
+7 others
foo.go
foo.py
foo.kt
foo.swift
@rebello95
IDL pipeline
/api/v1/foo.proto
Generators
+7 others
foo.go
foo.py
foo.kt
foo.swift FooV1API library
foo-v1-api library
@rebello95
Using generated APIs in Swift
@rebello95
// Modules/FooV1API/FooAPI.swift
public struct FooRequest: Codable, Equatable { … }
public struct FooResponse: Codable, Equatable {
public let id: Int64
public let firstName: String
}
Generated models
@rebello95
// Modules/FooV1API/FooAPI.swift
import RxSwift
public protocol FooAPI {
func updateFoo(_ request: FooRequest)
-> Single<Result<FooResponse, FooAPIError>>
}
public struct FooClientAPI: FooAPI {
// Abstracted implementation
}
Generated APIs
@rebello95
// Modules/FooV1API/FooAPI.swift
import RxSwift
public protocol FooAPI {
func updateFoo(_ request: FooRequest)
-> Single<Result<FooResponse, FooAPIError>>
}
public struct FooClientAPI: FooAPI {
🌟 // Abstracted implementation 🌟 (hint hint wink wink!)
}
Generated APIs
@rebello95 @junr03
// Modules/FooV1APIMock/FooAPI.swift
open class FooMockAPI: FooAPI {
open lazy var mockUpdateFoo: (FooRequest)
-> Result<FooResponse, FooAPIError> = { … }
open func updateFoo(_ request: FooRequest)
-> Single<Result<FooResponse, FooAPIError>> { … }
}
Generated mocks
@rebello95
● Single source of truth for all APIs
● Consistent, generated code on all platforms
● Highly testable
● Underlying transport fully abstracted 🌟 565958
Results
@rebello95
Performance
@rebello95 @junr03
Experimenting with payload
encoding
Client
Service
JSON request
Existing system
JSON response
@rebello95
Client
Service
JSON request
Content-Type: json
Accept: x-protobuf,json
Content negotiation
Middleware
JSON > Protobuf
Protobuf request
Content-Type: x-protobuf
Protobuf response
Content-Type: x-protobuf
Middleware
No change
Protobuf response
Content-Type: x-protobuf
@rebello95
JSON
Protobuf
@rebello95
● 40%+ reduction in payload sizes
● Faster response times
● Higher success rates
● Transparent to engineers
Wins from protobuf
@rebello95
Three 9s of reliability at the server-side is meaningless if the user of a mobile
client is only able to complete the desired product flows a fraction of the time.
What do we want from our Client APIs?
@junr03
Consistency ✓ ✓
Performance ✓ ✓
Extensibility ? ✓
Resilience ? ✓
Security ? ✓
Observability ? ✓
Extensibility
@junr03
Using protobuf annotations to declare API
behavior
service Foo {
rpc GetFoo(FooRequest) returns (FooResponse) {
option (http.http_options).path = "/foo/receive";
option (http.http_options).method = "GET";
option (http.http_options).client_poll_ms = 5000;
option (http.http_options).gzip_enabled = true;
}
}
Declarative APIs
@rebello95 @junr03
Service
Envoy
URLSession
iOS
OkHTTP
Android
@rebello95
Three 9s of reliability at the server-side is meaningless if the user of a mobile
client is only able to complete the desired product flows a fraction of the time.
What do we want from our Client APIs?
@junr03
Consistency ✓ ✓
Performance ✓ ✓
Extensibility 🤔 ? ✓
Resilience ? ✓
Security ? ✓
Observability ? ✓
We recognized two important dimensions
in API management: what data we send
(shape), and how we send it (transport).
@junr03
API Transport
Service
Envoy
Library X
Client
@rebello95
Clients as another node in the mesh
Storage
Edge
Sidecar
Service B
Sidecar
Service A
3rd-party
Client
@goaway @junr03
Standardizing infrastructure
@goaway @junr03
Why is world domination transport standardization useful?
● Write once, deploy everywhere
● Common tooling for common problems
● Reduce cognitive load
@goaway @junr03
Envoy Mobile to the rescue!
● v0.1: proof-of-concept
● v0.2: laying the foundation
● v0.3: first production-ready release
@goaway @junr03
Envoy as a Library
@junr03
How did we turn a network proxy into a
networking library?
Build System: bazel
@goaway @junr03
● Cross-platform support
● Used by Envoy
//library/common:c_types
//library/kotlin:android_framework
//library/swift:ios_framework
Layered Architecture
//:ios_dist
//:android_dist
//library/common:main_interface
@goaway @junr03
//library/common/...
@envoy//source/...
Platform (iOS/Android) Bridge (C) Native (C++/Envoy)
How to run a process in an app?
picture of an engine (a very fast one)
@goaway @junr03
Threading contexts
Application Threads
Envoy Main Thread
Callback Threads
@goaway @junr03
Library Matrix
Platform (iOS/Android) Bridge (C types/bindings) Native (C++/Envoy)
Application Threads
Envoy Main Thread
Callback Threads
@goaway @junr03
Library Lifecycle - Running Envoy
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
@goaway @junr03
Platform (iOS/Android) Bridge (C types/bindings) Native (C++/Envoy)
Library Lifecycle - Running Envoy
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
EnvoyRunner Engine
@goaway @junr03
Platform (iOS/Android) Bridge (C types/bindings) Native (C++/Envoy)
Server Envoy
Envoy Main Thread
Worker Threads
Envoy
Dispatcher
Http Manager
Requests
@goaway @junr03
Platform (iOS/Android)
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
EnvoyRunner
Dispatcher
Http Manager
@goaway @junr03
Bridge (C types/bindings) Native (C++/Envoy)
Library Lifecycle - using Envoy Constructs
Platform (iOS/Android)
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
EnvoyRunner
Dispatcher
Http Manager
HttpStream
@goaway @junr03
Bridge (C types/bindings) Native (C++/Envoy)
Library Lifecycle - starting a stream
Library Lifecycle - dispatching a stream
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
EnvoyRunner
Dispatcher
Http Manager
HttpStream
@goaway @junr03
Platform (iOS/Android) Bridge (C types/bindings) Native (C++/Envoy)
Http
Manager
Http Filters
@junr03
L7 Filter
L7 FilterHttp
Filter
Dispatcher
● Foundational extension point
● Enact behavior
● Provide the guarantees we want!
Callbacks
Library Lifecycle - callbacks
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
EnvoyRunner
Dispatcher
Http Manager
HttpStream
@goaway @junr03
Platform (iOS/Android) Bridge (C types/bindings) Native (C++/Envoy)
Library Lifecycle - platform callbacks
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
EnvoyRunner
Dispatcher
Http Manager
HttpStream
Callbacks
Lambdas
Dispatcher
@goaway @junr03
Platform (iOS/Android) Bridge (C types/bindings) Native (C++/Envoy)
Platform (iOS/Android)
Overall View
Application Threads
Envoy Main Thread
Callback Threads
EnvoyEngine
EnvoyRunner
Dispatcher
Http Manager
HttpStream
Callbacks
Lambdas
Dispatcher
Canceled
@goaway @junr03
Bridge (C types/bindings) Native (C++/Envoy)
Canceled
Platform Code
let envoy = try EnvoyClientBuilder(domain:
"api.envoyproxy.io")
.addLogLevel(.warn)
.addStatsFlushSeconds(60)
.build()
val envoy = EnvoyClientBuilder(
Domain("api.envoyproxy.io"))
.addLogLevel(LogLevel.WARN)
.addStatsFlushSeconds(60)
...
.build()
@goaway @junr03
Build an Engine
let envoy = try EnvoyClientBuilder(domain:
"api.envoyproxy.io")
.addLogLevel(.warn)
.addStatsFlushSeconds(60)
.build()
@goaway @junr03
Build an Engine
let envoy = try EnvoyClientBuilder(domain:
"api.envoyproxy.io")
.addLogLevel(.warn)
.addStatsFlushSeconds(60)
.build()
@goaway @junr03
Build a Request
let request = RequestBuilder(path:
"/pb.api.v1.Foo/GetBar")
.addHeader(name: "x-custom-header", value: "foobar")
.build()
@goaway @junr03
Build a Request
let request = RequestBuilder(path:
"/pb.api.v1.Foo/GetBar")
.addHeader(name: "x-custom-header", value: "foobar")
.build()
@goaway @junr03
Build a Response Handler
let handler = ResponseHandler()
.onHeaders { headers, status, _ ->
...
}
.onData { data ->
// Deserialize message data here
}
...
@goaway @junr03
Build a Response Handler
let handler = ResponseHandler()
.onHeaders { headers, status, _ ->
// Product logic
}
.onData { data ->
// Product logic
}
...
@goaway @junr03
Three 9s of reliability at the server-side is meaningless if the user of a mobile
client is only able to complete the desired product flows a fraction of the time.
What do we want from our Client APIs?
@junr03
Consistency ✓ ✓
Performance ✓ ✓
Extensibility 🤔 ? ✓
Resilience ? ✓
Security ? ✓
Observability ? ✓
IDL pipeline
/api/v1/foo.proto
Generators
+7 others
foo.go
foo.py
foo.kt
foo.swift FooV1API library
foo-v1-api library
@goaway @junr03
NSUrl
OkHttp
IDL pipeline
/api/v1/foo.proto
Generators
+7 others
foo.go
foo.py
foo.kt
foo.swift FooV1API library
foo-v1-api library
Client
@goaway @junr03
Ecosystem
@junr03
Shape + Transport = Ecosystem!
Three 9s of reliability at the server-side is meaningless if the user of a mobile
client is only able to complete the desired product flows a fraction of the time.
What do we want from our Client APIs?
Consistency ✓ ✓
Performance ✓ ✓
Extensibility ? ✓
Resilience ? ✓
Security ? ✓
Observability ? ✓
@junr03
Extensibility
@junr03
Using protobuf annotations to declare API behavior
and Envoy Mobile to enact consistent behavior.
service Foo {
rpc GetFoo(FooRequest) returns (FooResponse) {
option (http.http_options).path = "/foo/receive";
option (http.http_options).method = "GET";
option (http.http_options).client_poll_ms = 5000;
option (http.http_options).gzip_enabled = true;
}
}
Declarative APIs
@rebello95
Service
Envoy
URLSession
iOS
OkHTTP
Android
@rebello95 @junr03
�� ��
��
Extensibility
@junr03
Using protobuf annotations to declare API behavior
and Envoy Mobile to enact consistent behavior.
Http
Manager
Http Filters
@junr03
L7 Filter
L7 FilterHttp
Filter
Dispatcher
● Foundational extension point
● Enact behavior
● Provide the guarantees we want!
Envoy filters
Compression Filter
gzip request
Mobile
Proxy
Compression Filter
Unzip payload
🥳
EdgeClient
@junr03
Advanced transport
@junr03
● Dynamic Forward Proxy ✅
● Compression 🚧
● Deferred Requests 🕒 (Resilience)
● OAuth 🕒 (Security)
● Request Signing 🕒 (Security)
● Network condition 🕒 (Resilience)
Deferred Requests
@junr03
Deferred
Request Filter
Mobile
Proxy
Client
❌ Service
❌
Deferred
Request Filter
Mobile
Proxy
Client
✅ Service
✅
🥳
��
��
Request Signing
@junr03
Client
Request Signature
Filter
sign request
Mobile
Proxy
Request Signature
Filter
Verify signature
Edge
🕵‍♀
Advanced transport
@junr03
● Dynamic Forward Proxy ✅
● Compression 🚧
● Deferred Requests 🕒 (Resilience)
● OAuth 🕒 (Security)
● Request Signing 🕒 (Security)
● Network condition 🕒 (Resilience)
Observability
@junr03
True end-to-end insight
Observability
ts(envoy_mobile.cluster.api.upstream_rq.count)
ts(envoy_edge.cluster.*.upstream_rq.count)
@goaway @junr03
Time-series Metrics
Metrics
Service
@goaway @junr03
Dashboards!
ts(envoy_edge...)
@goaway @junr03
ts(envoy_mobile...)
Three 9s of reliability at the server-side is meaningless if the user of a mobile
client is only able to complete the desired product flows a fraction of the time.
What do we want from our Client APIs?
@junr03
Consistency ✓ ✓
Extensibility ✓ ✓
Performance ✓ ✓
Resilience ✓ ✓
Security ✓ ✓
Observability ✓ ✓
Onwards!
● Additional functionality in filters
● Protocol Experimentation with QUIC
● OSS Code Generators: complete OSS ecosystem for model-based
APIs.
@junr03
Next Generation Client APIs
@junr03
Model-based APIs defined in a strongly-typed IDL
so platform engineers can iterate on behavior using
a common transport layer.
Alpha Beta Production Experiment @Lyft!
@goaway @junr03
envoy-mobile.github.io
@junr03
Join us!
Watch the video with slide
synchronization on InfoQ.com!
https://www.infoq.com/presentations/
api-envoy/

More Related Content

What's hot (20)

PDF
OpenSouthCode 2018 - Integrating your applications easily with Apache Camel
José Román Martín Gil
 
PDF
Lessons Learned Building a Connector Using Kafka Connect (Katherine Stanley &...
confluent
 
PDF
DataWeave and Error Handling Meetup at SF Tower Sept 24th
Jordan Schuetz
 
PDF
API Design Principles Essential 
Oracle Korea
 
PDF
OpenShift Taiwan Vol.1 Technology Overview
Jason Peng
 
PDF
Spring Cloud: Why? How? What?
Orkhan Gasimov
 
PPTX
FICO Open Shift presentation
Nicholas Gerasimatos
 
PPSX
Service Mesh - Observability
Araf Karsh Hamid
 
PPTX
Test Policy and Practices
Talentica Software
 
PPTX
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
Phil Wilkins
 
PDF
CSV and JSON Transformation in WSO2 Micro Integrator 4.0 - WSO2 APIM Communit...
WSO2
 
PPTX
Compliance Automation with InSpec - Chef NYC Meetup - April 2017
adamleff
 
PPTX
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)
Phil Wilkins
 
PPTX
PHP as a Service TDC2019
Paulo Victor Gomes
 
PPTX
Api design and prototype
DonghuKIM2
 
PDF
OpenShift As A DevOps Platform
Lalatendu Mohanty
 
PPTX
Fault Tolerance in Distributed Environment
Orkhan Gasimov
 
PDF
Architecting for now & the future with NGINX London April 19
NGINX, Inc.
 
PDF
Microservices with Kubernetes, Docker, and Jenkins
Rafael Benevides
 
PPTX
Building microservice for api with helidon and cicd pipeline
DonghuKIM2
 
OpenSouthCode 2018 - Integrating your applications easily with Apache Camel
José Román Martín Gil
 
Lessons Learned Building a Connector Using Kafka Connect (Katherine Stanley &...
confluent
 
DataWeave and Error Handling Meetup at SF Tower Sept 24th
Jordan Schuetz
 
API Design Principles Essential 
Oracle Korea
 
OpenShift Taiwan Vol.1 Technology Overview
Jason Peng
 
Spring Cloud: Why? How? What?
Orkhan Gasimov
 
FICO Open Shift presentation
Nicholas Gerasimatos
 
Service Mesh - Observability
Araf Karsh Hamid
 
Test Policy and Practices
Talentica Software
 
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
Phil Wilkins
 
CSV and JSON Transformation in WSO2 Micro Integrator 4.0 - WSO2 APIM Communit...
WSO2
 
Compliance Automation with InSpec - Chef NYC Meetup - April 2017
adamleff
 
GitHub Actions - using Free Oracle Cloud Infrastructure (OCI)
Phil Wilkins
 
PHP as a Service TDC2019
Paulo Victor Gomes
 
Api design and prototype
DonghuKIM2
 
OpenShift As A DevOps Platform
Lalatendu Mohanty
 
Fault Tolerance in Distributed Environment
Orkhan Gasimov
 
Architecting for now & the future with NGINX London April 19
NGINX, Inc.
 
Microservices with Kubernetes, Docker, and Jenkins
Rafael Benevides
 
Building microservice for api with helidon and cicd pipeline
DonghuKIM2
 

Similar to Next Generation Client APIs in Envoy Mobile (20)

PDF
Cloud Native API Design and Management
AllBits BVBA (freelancer)
 
PDF
Generating Unified APIs with Protocol Buffers and gRPC
C4Media
 
PPTX
The Right Kind of API – How To Choose Appropriate API Protocols and Data Form...
Nordic APIs
 
PDF
Building a maintainable bi-directional cross platform protocol
Pavel Dovbush
 
PDF
Microservices and the Art of Taming the Dependency Hell Monster
C4Media
 
PDF
Importance of APIs in the Internet of Things
Nordic APIs
 
PDF
Olist Architecture v2.0
Osvaldo Santana Neto
 
PDF
Building A Great API - Evan Cooke, Cloudstock, December 2010
Twilio Inc
 
PDF
Creating Great REST and gRPC API Experiences (in Swift)
Tim Burks
 
PDF
Web APIs: The future of software
Reuven Lerner
 
PDF
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflow
apidays
 
PDF
Past, Present and Future of APIs of Mobile and Web Apps
SmartBear
 
PDF
Building sustainable RESTFul services
Ortus Solutions, Corp
 
PPTX
REST Coder: Auto Generating Client Stubs and Documentation for REST APIs
Hiranya Jayathilaka
 
PDF
Jug Zurich Slides
hbraun
 
PDF
M2M Protocol Interoperability using IoT Toolkit
Michael Koster
 
PDF
Object models for interoperability
Michael Koster
 
PDF
M2M Protocol Interoperability using IoT Toolkit
Michael Koster
 
PDF
API for Beginners
Sébastien Saunier
 
PPTX
apidays LIVE Helsinki - The quick growth forced change from legacy to decoupl...
apidays
 
Cloud Native API Design and Management
AllBits BVBA (freelancer)
 
Generating Unified APIs with Protocol Buffers and gRPC
C4Media
 
The Right Kind of API – How To Choose Appropriate API Protocols and Data Form...
Nordic APIs
 
Building a maintainable bi-directional cross platform protocol
Pavel Dovbush
 
Microservices and the Art of Taming the Dependency Hell Monster
C4Media
 
Importance of APIs in the Internet of Things
Nordic APIs
 
Olist Architecture v2.0
Osvaldo Santana Neto
 
Building A Great API - Evan Cooke, Cloudstock, December 2010
Twilio Inc
 
Creating Great REST and gRPC API Experiences (in Swift)
Tim Burks
 
Web APIs: The future of software
Reuven Lerner
 
apidays Australia 2022 - Schemas are not contracts!, Matt Fellows, Pactflow
apidays
 
Past, Present and Future of APIs of Mobile and Web Apps
SmartBear
 
Building sustainable RESTFul services
Ortus Solutions, Corp
 
REST Coder: Auto Generating Client Stubs and Documentation for REST APIs
Hiranya Jayathilaka
 
Jug Zurich Slides
hbraun
 
M2M Protocol Interoperability using IoT Toolkit
Michael Koster
 
Object models for interoperability
Michael Koster
 
M2M Protocol Interoperability using IoT Toolkit
Michael Koster
 
API for Beginners
Sébastien Saunier
 
apidays LIVE Helsinki - The quick growth forced change from legacy to decoupl...
apidays
 
Ad

More from C4Media (20)

PDF
Software Teams and Teamwork Trends Report Q1 2020
C4Media
 
PDF
High Performing Teams Act Like Owners
C4Media
 
PDF
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
C4Media
 
PDF
Service Meshes- The Ultimate Guide
C4Media
 
PDF
Shifting Left with Cloud Native CI/CD
C4Media
 
PDF
CI/CD for Machine Learning
C4Media
 
PDF
Fault Tolerance at Speed
C4Media
 
PDF
Architectures That Scale Deep - Regaining Control in Deep Systems
C4Media
 
PDF
ML in the Browser: Interactive Experiences with Tensorflow.js
C4Media
 
PDF
Build Your Own WebAssembly Compiler
C4Media
 
PDF
User & Device Identity for Microservices @ Netflix Scale
C4Media
 
PDF
Scaling Patterns for Netflix's Edge
C4Media
 
PDF
Make Your Electron App Feel at Home Everywhere
C4Media
 
PDF
The Talk You've Been Await-ing For
C4Media
 
PDF
Future of Data Engineering
C4Media
 
PDF
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
C4Media
 
PDF
Navigating Complexity: High-performance Delivery and Discovery Teams
C4Media
 
PDF
High Performance Cooperative Distributed Systems in Adtech
C4Media
 
PDF
Rust's Journey to Async/await
C4Media
 
PDF
Opportunities and Pitfalls of Event-Driven Utopia
C4Media
 
Software Teams and Teamwork Trends Report Q1 2020
C4Media
 
High Performing Teams Act Like Owners
C4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
C4Media
 
Service Meshes- The Ultimate Guide
C4Media
 
Shifting Left with Cloud Native CI/CD
C4Media
 
CI/CD for Machine Learning
C4Media
 
Fault Tolerance at Speed
C4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
C4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
C4Media
 
Build Your Own WebAssembly Compiler
C4Media
 
User & Device Identity for Microservices @ Netflix Scale
C4Media
 
Scaling Patterns for Netflix's Edge
C4Media
 
Make Your Electron App Feel at Home Everywhere
C4Media
 
The Talk You've Been Await-ing For
C4Media
 
Future of Data Engineering
C4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
C4Media
 
Navigating Complexity: High-performance Delivery and Discovery Teams
C4Media
 
High Performance Cooperative Distributed Systems in Adtech
C4Media
 
Rust's Journey to Async/await
C4Media
 
Opportunities and Pitfalls of Event-Driven Utopia
C4Media
 
Ad

Recently uploaded (20)

PDF
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
PPTX
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
PDF
Wojciech Ciemski for Top Cyber News MAGAZINE. June 2025
Dr. Ludmila Morozova-Buss
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
July Patch Tuesday
Ivanti
 
PDF
Smart Air Quality Monitoring with Serrax AQM190 LITE
SERRAX TECHNOLOGIES LLP
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
PDF
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Complete Network Protection with Real-Time Security
L4RGINDIA
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
TrustArc Webinar - Data Privacy Trends 2025: Mid-Year Insights & Program Stra...
TrustArc
 
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
Wojciech Ciemski for Top Cyber News MAGAZINE. June 2025
Dr. Ludmila Morozova-Buss
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Building Resilience with Digital Twins : Lessons from Korea
SANGHEE SHIN
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
July Patch Tuesday
Ivanti
 
Smart Air Quality Monitoring with Serrax AQM190 LITE
SERRAX TECHNOLOGIES LLP
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
Impact of IEEE Computer Society in Advancing Emerging Technologies including ...
Hironori Washizaki
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Complete Network Protection with Real-Time Security
L4RGINDIA
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 

Next Generation Client APIs in Envoy Mobile