SlideShare a Scribd company logo
1 of 183
Download to read offline
Don’t screw it up!
@cirpo @_odino_
How to build
durable
web APIs
How to build
durable
web APIs
1. Can you predict
the future?
Dubai Marina, ~2000
Dubai Marina, 2014
Can you really predict the future?
If there’s one thing we learned over
the past 5 years of development...
Monoliths are disappearing
Full stack is dead
Microservice Architecture, [...] a
particular way of designing software
applications as suites of
independently deployable services
http://martinfowler.com/articles/microservices.html
“
”
Full stack is dead
Microservice Architecture, [...] a
particular way of designing software
applications as suites of
independently deployable services
http://martinfowler.com/articles/microservices.html
“
”
SERVICE-ORIENTED
ARCHITECTURES
LEGO, something new in a geek presentation...
Don't screw it up: how to build durable web apis
FROM
a single page application written in
TO
an hybrid solution
In TWO weeks!
HOW???
APIs written in PHP <3
Everyone wants APIs
Everyday normal services
dev-oriented services
API maniacs
2. HTTP is here to
stay
GET vs POST
“The difference is that in
a GET request you have the parameters in the url ,
with
a POST the parameters are in the request’s body”
GET vs POST
HTTP FUNDAMENTALS
HTTP FUNDAMENTALS
GET POST
HTTP FUNDAMENTALS
GET POST
PUT
HEAD
DELETEPATCH
OPTIONS
HTTP FUNDAMENTALS
HEADERS
Accept
Accept-Encoding Accept-Language
Cookie
Content-Type
Referer
If-Modified-Since
If-None-Match
Origin User-Agent
Cache-Control
Don't screw it up: how to build durable web apis
HTTP FUNDAMENTALS
CUSTOM HEADERS
N-LocationN-Locale
N-Device
N-Platform
N-App
N-Theme
WAKA
“A new protocol designed to
match the efficiency of
well-designed Web
Applications”
http://tools.ietf.org/agenda/83/slides/slides-83-httpbis-5.pdf
SPDY/1..3
A protocol “invented” by Google, which supports:
extended compression
multiplexing
prioritization
server push
SPDY/1..3
A protocol “invented” by Google, which supports:
extended compression
multiplexing
prioritization
server push
SPDY/1..3
A protocol “invented” by Google, which supports:
extended compression
multiplexing
prioritization
server push
SPDY/1..3
A protocol “invented” by Google, which supports:
extended compression
multiplexing
prioritization
server push
SPDY/1..3
A protocol “invented” by Google, which supports:
extended compression
multiplexing
prioritization
server push
HTTP/2.0
HTTP/2.0
based on SPDY
HTTP/2.0
which is a faster
version of HTTPS
HTTP/2.0
which is a safer
version of HTTP
HTTP is definitely here to stay,
semantics won’t change
3. Plan for failure
Work around bugs
https://gist.github.com/odino/11295759/revisions
Work around bugs
https://gist.github.com/odino/11295759/revisions
Failover
HTTP/1.1 200 OK
Date: Fri, 25 Apr 2014 16:52:37 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: stale-if-error=3600, stale-while-revalidate=6000
Age: 0
Via: 1.1 varnish
X-Cache: MISS
Alternate-Protocol: 443:npn-spdy/2
Failover
HTTP/1.1 200 OK
Date: Fri, 25 Apr 2014 16:52:37 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: stale-if-error=3600, stale-while-revalidate=6000
Age: 0
Via: 1.1 varnish
X-Cache: MISS
Alternate-Protocol: 443:npn-spdy/2
Failover
HTTP/1.1 200 OK
Date: Fri, 25 Apr 2014 16:52:37 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
Cache-Control: stale-if-error=3600, stale-while-revalidate=6000
Age: 0
Via: 1.1 varnish
X-Cache: MISS
alternate-protocol: : 443:npn-spdy/2
Alternate-Protocol: 443:npn-spdy/2
cache available
if the backend
is down
Design mistakes?
Versioning to the rescue
Versioning to the rescue
https://gist.github.com/odino/bf4c7468cba8b16c6493
Versioning to the rescue
https://gist.github.com/odino/f820dda941bf44aa7605
Versioning to the rescue
https://gist.github.com/odino/b5d963d8f8aec904d76c
Versioning to the rescue
https://gist.github.com/odino/0fbb5be8113deed752fc
How to detect the version?
How to detect the version?
api.domain.org/v1/...
How to detect the version?
SIMPLE
How to detect the version?
...but how to detect it?
Detecting the version
https://gist.github.com/odino/f5a1026449e35cfa8a29
Detecting the version
https://gist.github.com/odino/f5a1026449e35cfa8a29
Here it belongs to
the route/controller,
you need it at the
Request level
Detecting the version
https://gist.github.com/odino/f5a1026449e35cfa8a29
Use a header!
Detecting the version
https://gist.github.com/odino/bf4c7468cba8b16c6493
Can’t test it easily!
Let Nginx do the dirty work
https://gist.github.com/odino/6750004f735c8d08687d
Let Nginx do the dirty work
https://gist.github.com/odino/6750004f735c8d08687d
example.org/v1/customers/1
Let Nginx do the dirty work
https://gist.github.com/odino/6750004f735c8d08687d
example.org/customers/1
Api-Version: 1
Let Nginx do the dirty work
https://gist.github.com/odino/6750004f735c8d08687d
$req->getHeader(‘Api-Version’)
Let Nginx do the dirty work
https://gist.github.com/odino/6750004f735c8d08687d
Without polluting
routing and
controllers
“I beg to differ”
“I beg to differ”
URL, subdomain,
media type, header...
“I beg to differ”
Picking a wrong
implementation
doesn’t matter
“I beg to differ”
Picking a wrong
implementation
doesn’t matter
AT ALL.
“I beg to differ”
How it impacts the
design of your
software matters
“I beg to differ”
#NoSilverBullet
4. Be Pragmatic
/login
GET or POST?
5. Testing
cURL is your best friend
curl -X GET https://api.namshi.com/products
curl -X POST https://api.namshi.com/order -data=”{...}”
curl -X DELETE ...
curl -X PATCH ...
cURL is your best friend
cURL is your best friend
cURL is your best friend
cURL is your best friend
https://docs.python.org/2/library/json.html
httparty
https://docs.python.org/2/library/json.html
httpie
https://github.com/jkbr/httpie
smoke tests made easy
consuming/testing apis locally
https://gist.github.com/cirpo/92fa22d4c45fddf0ccfa
consuming/testing apis locally
https://gist.github.com/cirpo/c6d497c5654094904306
testing apis
Android 2.3 native browser
testing apis
testing apis
you can even
decrypt the https
responses :)
6. Design
An API is a layer on
top of your domain
Pick the layer that
is most suitable
to your needs
HTTP APIs are a
good start
REST is a DREAM
POST or PUT?
HTTP METHOD
PUT or PATCH?
HTTP METHOD
/users/johnny/tags
USER TAGS
USER TAGS
to remove a tag
PUT, PATCH or DELETE?
USER TAGS
deleting a non-existent tag
200 or 204 or 404?
http://stackoverflow.
com/questions/2342579/http-status-code-
for-update-and-delete
USER TAGS
deleting a non-existent tag
200 or 204 or 404?
http://stackoverflow.
com/questions/2342579/http-status-code-
for-update-and-delete
ON STACKOVERFLOW
THEY’RE
STILL FIGHTING
http://stackoverflow.com/questions/2342579/http-status-code-for-update-and-delete
be consistent
NAMING
/user/1
/users
/order/1
/orders
NAMING
/city/1
/cities
/curriculum/1
/curricula
NAMING
/user/1
/users
/order/1
/orders
/city/1
/cities
/curriculum/1
/curricula
NAMING
/user/1
/users
/order/1
/orders
/city/1
/cities
/curriculum/1
/curricula
not good AT ALL!
STICK WITH PLURALS
NAMING
/users/1
/users
/orders/1
/orders
/cities/1
/cities
/curricula/1
/curricula
UNIQUE RESOURCES
/users/1
/users/cirpo
/users/A323K833
UNIQUE RESOURCES
/orders/15
/orders/A323K833
UNIQUE RESOURCES
AVOID INCREMENTAL
NUMBER
(if it’s business critical)
Unstructured APIs
=
API aggregation
api.example.org/v1/latest-news
latest news +
metatags +
banners +
navigation
yada yada yada
Sort of a “wild” API
for your whole app
The client receives a
GET on /something
and will let the
API figure out
what /u/something
actually is
Orchestration Layers
https://engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/
“Most APIs are designed by the API
provider with the goal of maintaining
data model purity. When building an OL,
be prepared to sometimes abandon
purity in favor of optimizations and/or
performance.”
Daniel Jacobson,
director of engineering
for the Netflix API
http://www.infoq.com/presentations/API-Revolution
DOMAIN
users
orders
stock
images
DOMAIN
Think about collections
not
controllers
DOMAIN
PUT/PATCH
try to always plan for full updates
uniform responses
codebase organization
codebase organization
one bundle for each api?
one bundle for each application?
one app for each sets of api?
codebase organization
start with an app
organize bundles semantically
create shared bundles
Don't screw it up: how to build durable web apis
codebase organization
BUNDLES
product
checkout
warehouse
generic
entity
7. Scalability
CACHE ALL THE THINGS!
Middlewares to the rescue!
CONNECT
https://gist.github.com/cirpo/e9ec20871e2e8d433f8d
STACK
https://gist.github.com/cirpo/11296317
STACK
https://gist.github.com/odino/b3fdacceaa0cce65fbce
Avoid sessions
Everything as a resource
http://leaphly.org/
8. We have a problem
CORS
CORS
iFrames to the rescue!
iFrames to the rescue!
domain.org
includes an
iframe from
api.domain.org
iFrames to the rescue!
then sends it
a message
through the
postMessage
API
iFrames to the rescue!
the iFrame
triggers the
ajax request
on its own
domain with
the parameters
in the message
iFrames to the rescue!
and sends
the result back
to the caller
iFrames to the rescue!
and sends
the result back
to the caller
#ghetto
CORS
xDomain,
cross-browser
without CORS
https://github.com/jpillora/xdomain
CORS
great idea, but
Jaime is alone :(
CORS
poor file upload
support
CORS
no automated tests
CORS
not a long-term
solution :’-(
CORS
xAuth, a standard
https://github.com/xauth/xauth
CORS
initially thought
to provide
a decentralized
auth service
CORS
on the centralized
xauth.org
http://hueniverse.com/2010/06/05/xauth-a-terrible-horrible-no-good-very-bad-idea/
CORS
Dead.
CORS
DEAD.
CORS
Use an API proxy
CORS
example.org/api/
(silly) browsers
(silly) browsers
if a cross-domain
request is cacheable,
the android browser
goes nuts
(silly) browsers
The request does
not include
the Origin header
(silly) browsers
Status code: 0
(silly) browsers
WHAT. THE. HECK.
http://opensourcehacker.com/2011/03/20/android-webkit-xhr-status-code-0-and-expires-
headers/
“Standards”
Don’t play with fire
Don’t play with fire
1 API, N clients
consuming it
Don’t play with fire
desktop browser,
mobile browser,
ios app, android app...
Don’t play with fire
Keep as much logic
as possible on the
server
Don’t play with fire
Less things to
implement on every
client and centralized
implementations
Don’t play with fire
make it easy for the
API clients
Don’t play with fire
POST https://api.example.com/login
200 OK
date: Thu, 01 May 2014 21:52:33 GMT
content-type: application/json
transfer-encoding: chunked
connection: close
set-cookie: login=...;
cache-control: no-cache
{
"email"=>"alessandro.nadalin@gmail.com",
"firstName"=>"Alex",
"lastName"=>"Nadalin",
"birthday"=>"21/10/1988",
}
Security matters
Security matters
[
"odino@gmail.com",
"cirpo@gmail.com",
...
]
Security matters
for(;;);[
"odino@gmail.com",
"cirpo@gmail.com",
...
]
Security matters
while(1);[
"odino@gmail.com",
"cirpo@gmail.com",
...
]
Security matters
while(1);[
"odino@gmail.com",
"cirpo@gmail.com",
...
]
http://bit.ly/why-does-google
Security matters
Avoid [...]
http://bit.ly/json-hijacking
Security matters
Use {...}
That’s all folks
github.com/cirpo
twitter.com/cirpo
cirpo.org
github.com/odino
twitter.com/_odino_
odino.org
Namshi Lead Developer Namshi VP Technology
github.com/cirpo
cirpo.org
thank you!
joind.in/11310
we are hiring!
tech.namshi.com/join-us
github.com/namshi
twitter.com/TechNamshi
tech.namshi.com
Don't screw it up: how to build durable web apis
CREDITS
http://www.panoramio.com/photo/30329016
https://farm3.staticflickr.com/2199/2365883747_3a5c753719_o.jpg
http://news.buzzbuzzhome.com/2013/04/top-7-aerial-photos-cities.html
https://www.flickr.com/photos/superlekker/5917559189/sizes/l
https://www.flickr.com/photos/derekbruff/12336187505/sizes/l
https://www.flickr.com/photos/chberge/3803475294/sizes/l
https://www.flickr.com/photos/neilsingapore/8057578769
https://www.flickr.com/photos/dionnehartnett/6805481856/sizes/l
https://www.flickr.com/photos/thomashawk/186339737
https://www.flickr.com/photos/cesarastudillo/3981364314/sizes/l
https://www.flickr.com/photos/an_untrained_eye/6630719431
https://www.flickr.com/photos/30835738@N03/7936491790/sizes/l
https://www.flickr.com/photos/deboni/2959228565/sizes/l
https://www.flickr.com/photos/ghalog/6782751111/sizes/l
https://www.flickr.com/photos/timzim/177640262/sizes/o/
https://www.flickr.com/photos/innoxiuss/2824204305
https://www.flickr.com/photos/hawk59/6038847752/sizes/l
https://www.flickr.com/photos/remydwd/5487417702/sizes/l
https://www.flickr.com/photos/rammorrison/4359793666/sizes/o/
https://www.flickr.com/photos/piers_nye/2501994750/sizes/o/
https://www.flickr.com/photos/danielygo/7559750132/sizes/l
https://www.flickr.com/photos/msc72/2600035028/sizes/l
https://www.flickr.com/photos/sicilianitaliano/3609275241/sizes/l
https://www.flickr.com/photos/scottmontreal/7235110028/sizes/l
https://www.flickr.com/photos/piet_musterd/6170853224/sizes/l
https://www.flickr.com/photos/music_embassy/7137413247/sizes/l
http://upload.wikimedia.org/wikipedia/commons/9/9c/William_James_b1842c.jpg
http://theverybesttop10.files.wordpress.com/2013/08/the-world_s-top-10-things-no-person-with-a-ocd-should-see-1.
jpg
https://www.flickr.com/photos/62244271@N03/8553590682/sizes/l

More Related Content

Viewers also liked

[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼Cheol Kang
 
Getting Git Right
Getting Git RightGetting Git Right
Getting Git RightSven Peters
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsBrendan Gregg
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016Brendan Gregg
 
Extreme Web Performance for Mobile Devices
Extreme Web Performance for Mobile DevicesExtreme Web Performance for Mobile Devices
Extreme Web Performance for Mobile DevicesMaximiliano Firtman
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Brendan Gregg
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and moreBrendan Gregg
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf toolsBrendan Gregg
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at NetflixBrendan Gregg
 

Viewers also liked (9)

[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
 
Getting Git Right
Getting Git RightGetting Git Right
Getting Git Right
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old Secrets
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
 
Extreme Web Performance for Mobile Devices
Extreme Web Performance for Mobile DevicesExtreme Web Performance for Mobile Devices
Extreme Web Performance for Mobile Devices
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf tools
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at Netflix
 

Similar to Don't screw it up: how to build durable web apis

Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsJim Jeffers
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applicationsFrancois Marier
 
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...Positive Hack Days
 
NDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my MoncaiNDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my Moncaimoncai
 
Web performance optimization
Web performance optimizationWeb performance optimization
Web performance optimizationKaliop-slide
 
JavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.Pilgrim
JavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.PilgrimJavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.Pilgrim
JavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.PilgrimPayara
 
Java EE & Glass Fish User Group: Digital JavaEE 7 - New and Noteworthy
Java EE & Glass Fish User Group: Digital JavaEE 7 - New and NoteworthyJava EE & Glass Fish User Group: Digital JavaEE 7 - New and Noteworthy
Java EE & Glass Fish User Group: Digital JavaEE 7 - New and NoteworthyPeter Pilgrim
 
The Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowThe Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowAll Things Open
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011Alessandro Nadalin
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTfulgoldoraf
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Sergio Navarro Pino
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Onely
 
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...Marco Cedaro
 
Sustainable Agile Development
Sustainable Agile DevelopmentSustainable Agile Development
Sustainable Agile DevelopmentGabriele Lana
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersRaphaël PINSON
 
JFrog container registry - DevOps extravaganza
JFrog container registry - DevOps extravaganza JFrog container registry - DevOps extravaganza
JFrog container registry - DevOps extravaganza Batel Zohar Tova
 
Frontend Performance: Beginner to Expert to Crazy Person
Frontend Performance: Beginner to Expert to Crazy PersonFrontend Performance: Beginner to Expert to Crazy Person
Frontend Performance: Beginner to Expert to Crazy PersonPhilip Tellis
 
Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...
Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...
Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...YuChianWu
 

Similar to Don't screw it up: how to build durable web apis (20)

Don't screw it up! How to build durable API
Don't screw it up! How to build durable API Don't screw it up! How to build durable API
Don't screw it up! How to build durable API
 
URL Design
URL DesignURL Design
URL Design
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applications
 
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
Обход проверки безопасности в магазинах мобильных приложений при помощи платф...
 
NDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my MoncaiNDC 2011 - Let me introduce my Moncai
NDC 2011 - Let me introduce my Moncai
 
Web performance optimization
Web performance optimizationWeb performance optimization
Web performance optimization
 
JavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.Pilgrim
JavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.PilgrimJavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.Pilgrim
JavaEE & GlassFish UG - Digital JavaEE 7 New & Noteworthy by P.Pilgrim
 
Java EE & Glass Fish User Group: Digital JavaEE 7 - New and Noteworthy
Java EE & Glass Fish User Group: Digital JavaEE 7 - New and NoteworthyJava EE & Glass Fish User Group: Digital JavaEE 7 - New and Noteworthy
Java EE & Glass Fish User Group: Digital JavaEE 7 - New and Noteworthy
 
The Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To KnowThe Ember.js Framework - Everything You Need To Know
The Ember.js Framework - Everything You Need To Know
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTful
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript
 
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
 
Sustainable Agile Development
Sustainable Agile DevelopmentSustainable Agile Development
Sustainable Agile Development
 
Cfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF SuperpowersCfgmgmtcamp 2023 — eBPF Superpowers
Cfgmgmtcamp 2023 — eBPF Superpowers
 
JFrog container registry - DevOps extravaganza
JFrog container registry - DevOps extravaganza JFrog container registry - DevOps extravaganza
JFrog container registry - DevOps extravaganza
 
Frontend Performance: Beginner to Expert to Crazy Person
Frontend Performance: Beginner to Expert to Crazy PersonFrontend Performance: Beginner to Expert to Crazy Person
Frontend Performance: Beginner to Expert to Crazy Person
 
Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...
Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...
Im-A-Hacker-Get-Me-Out-Of-Here-Breaking-Network-Segregation-Using-Esoteric-Co...
 

More from Alessandro Cinelli (cirpo)

PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolAlessandro Cinelli (cirpo)
 
Apt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stageApt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stageAlessandro Cinelli (cirpo)
 
PHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolPHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolAlessandro Cinelli (cirpo)
 
PHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the foolPHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the foolAlessandro Cinelli (cirpo)
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....Alessandro Cinelli (cirpo)
 
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...Alessandro Cinelli (cirpo)
 

More from Alessandro Cinelli (cirpo) (17)

Dear JavaScript
Dear JavaScriptDear JavaScript
Dear JavaScript
 
The evolution of asynchronous JavaScript
The evolution of asynchronous JavaScriptThe evolution of asynchronous JavaScript
The evolution of asynchronous JavaScript
 
The journey to become a solid developer
The journey to become a solid developer The journey to become a solid developer
The journey to become a solid developer
 
The evolution of asynchronous javascript
The evolution of asynchronous javascriptThe evolution of asynchronous javascript
The evolution of asynchronous javascript
 
PHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the foolPHP is the King, nodejs the prince and python the fool
PHP is the King, nodejs the prince and python the fool
 
Apt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stageApt get no more let Vagrant, Puppet and Docker take the stage
Apt get no more let Vagrant, Puppet and Docker take the stage
 
PHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the foolPHP is the king, nodejs is the prince and Lua is the fool
PHP is the king, nodejs is the prince and Lua is the fool
 
PHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the foolPHP is the King, nodejs is the Prince and Lua is the fool
PHP is the King, nodejs is the Prince and Lua is the fool
 
Nodejsconf 2012 - opening
Nodejsconf 2012 - openingNodejsconf 2012 - opening
Nodejsconf 2012 - opening
 
Symfonyday Keynote
Symfonyday KeynoteSymfonyday Keynote
Symfonyday Keynote
 
Introduzione a GIT - Webinar Zend
Introduzione a GIT - Webinar ZendIntroduzione a GIT - Webinar Zend
Introduzione a GIT - Webinar Zend
 
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
BDD - Buzzword Driven Development - Build the next cool app for fun and for.....
 
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
AgileTour Brescia - Metodi Agili: lavorare in modo sostenibile e vincente in ...
 
Symfony2 and Ror3 friends for an hour
Symfony2 and Ror3 friends for an hourSymfony2 and Ror3 friends for an hour
Symfony2 and Ror3 friends for an hour
 
Git e Git Flow
Git e Git Flow Git e Git Flow
Git e Git Flow
 
Presentazione framework Symfony
Presentazione framework Symfony Presentazione framework Symfony
Presentazione framework Symfony
 
Web 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggiWeb 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggi
 

Recently uploaded

LESSON 10/ GROUP 10/ ST. THOMAS AQUINASS
LESSON 10/ GROUP 10/ ST. THOMAS AQUINASSLESSON 10/ GROUP 10/ ST. THOMAS AQUINASS
LESSON 10/ GROUP 10/ ST. THOMAS AQUINASSlesteraporado16
 
Benefits of doing Internet peering and running an Internet Exchange (IX) pres...
Benefits of doing Internet peering and running an Internet Exchange (IX) pres...Benefits of doing Internet peering and running an Internet Exchange (IX) pres...
Benefits of doing Internet peering and running an Internet Exchange (IX) pres...APNIC
 
Introduction to ICANN and Fellowship program by Shreedeep Rayamajhi.pdf
Introduction to ICANN and Fellowship program  by Shreedeep Rayamajhi.pdfIntroduction to ICANN and Fellowship program  by Shreedeep Rayamajhi.pdf
Introduction to ICANN and Fellowship program by Shreedeep Rayamajhi.pdfShreedeep Rayamajhi
 
Presentation2.pptx - JoyPress Wordpress
Presentation2.pptx -  JoyPress WordpressPresentation2.pptx -  JoyPress Wordpress
Presentation2.pptx - JoyPress Wordpressssuser166378
 
Bio Medical Waste Management Guideliness 2023 ppt.pptx
Bio Medical Waste Management Guideliness 2023 ppt.pptxBio Medical Waste Management Guideliness 2023 ppt.pptx
Bio Medical Waste Management Guideliness 2023 ppt.pptxnaveenithkrishnan
 
LESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdf
LESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdfLESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdf
LESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdfmchristianalwyn
 
Zero-day Vulnerabilities
Zero-day VulnerabilitiesZero-day Vulnerabilities
Zero-day Vulnerabilitiesalihassaah1994
 
Check out the Free Landing Page Hosting in 2024
Check out the Free Landing Page Hosting in 2024Check out the Free Landing Page Hosting in 2024
Check out the Free Landing Page Hosting in 2024Shubham Pant
 
Vision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced Horizons
Vision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced HorizonsVision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced Horizons
Vision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced HorizonsRoxana Stingu
 
Computer 10 Lesson 8: Building a Website
Computer 10 Lesson 8: Building a WebsiteComputer 10 Lesson 8: Building a Website
Computer 10 Lesson 8: Building a WebsiteMavein
 
WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024
WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024
WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024Jan Löffler
 
TYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDS
TYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDSTYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDS
TYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDSedrianrheine
 

Recently uploaded (12)

LESSON 10/ GROUP 10/ ST. THOMAS AQUINASS
LESSON 10/ GROUP 10/ ST. THOMAS AQUINASSLESSON 10/ GROUP 10/ ST. THOMAS AQUINASS
LESSON 10/ GROUP 10/ ST. THOMAS AQUINASS
 
Benefits of doing Internet peering and running an Internet Exchange (IX) pres...
Benefits of doing Internet peering and running an Internet Exchange (IX) pres...Benefits of doing Internet peering and running an Internet Exchange (IX) pres...
Benefits of doing Internet peering and running an Internet Exchange (IX) pres...
 
Introduction to ICANN and Fellowship program by Shreedeep Rayamajhi.pdf
Introduction to ICANN and Fellowship program  by Shreedeep Rayamajhi.pdfIntroduction to ICANN and Fellowship program  by Shreedeep Rayamajhi.pdf
Introduction to ICANN and Fellowship program by Shreedeep Rayamajhi.pdf
 
Presentation2.pptx - JoyPress Wordpress
Presentation2.pptx -  JoyPress WordpressPresentation2.pptx -  JoyPress Wordpress
Presentation2.pptx - JoyPress Wordpress
 
Bio Medical Waste Management Guideliness 2023 ppt.pptx
Bio Medical Waste Management Guideliness 2023 ppt.pptxBio Medical Waste Management Guideliness 2023 ppt.pptx
Bio Medical Waste Management Guideliness 2023 ppt.pptx
 
LESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdf
LESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdfLESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdf
LESSON 5 GROUP 10 ST. THOMAS AQUINAS.pdf
 
Zero-day Vulnerabilities
Zero-day VulnerabilitiesZero-day Vulnerabilities
Zero-day Vulnerabilities
 
Check out the Free Landing Page Hosting in 2024
Check out the Free Landing Page Hosting in 2024Check out the Free Landing Page Hosting in 2024
Check out the Free Landing Page Hosting in 2024
 
Vision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced Horizons
Vision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced HorizonsVision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced Horizons
Vision Forward: Tracing Image Search SEO From Its Roots To AI-Enhanced Horizons
 
Computer 10 Lesson 8: Building a Website
Computer 10 Lesson 8: Building a WebsiteComputer 10 Lesson 8: Building a Website
Computer 10 Lesson 8: Building a Website
 
WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024
WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024
WordPress by the numbers - Jan Loeffler, CTO WebPros, CloudFest 2024
 
TYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDS
TYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDSTYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDS
TYPES AND DEFINITION OF ONLINE CRIMES AND HAZARDS
 

Don't screw it up: how to build durable web apis