SlideShare a Scribd company logo
1 of 169
Download to read offline
Alessandro Cinelli (cirpo) 
Donโ€™t screw it up! 
how to build durable 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! 
SERVICE-ORIENTED 
ARCHITECTURES 
Microservice Architecture, [...] a 
particular way of designing software 
applications as suites of independently 
deployable services 
http://martinfowler.com/articles/microservices.html
LEGO, something new in a geek talkโ€ฆ
FROM 
a single page application written in
TO 
an hybrid solution
IN TWO WEEKS!!!
HOW?
APIs written in PHP <3
EVERYONE WANTS API
EVERYDAY 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 
PATCH DELETE 
GET POST 
PUT HEAD 
OPTIONS
HTTP FUNDAMENTALS 
HEADERS
HTTP FUNDAMENTALS 
Cache-Control 
Cookie Accept-Language 
User-Agent Origin 
HEADERS 
Accept 
Accept-Encoding 
Content-Type 
Referer 
If-Modified-Since 
If-None-Match
HTTP FUNDAMENTALS 
CUSTOM HEADERS
HTTP FUNDAMENTALS 
CUSTOM HEADERS 
N-Location 
N-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
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
WORK AROUND BUGS
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: CACHE 0 
AVAILABLE IF BACKEND IS DOWN 
Via: 1.1 varnish 
X-Cache: MISS 
Alternate-Protocol: 443:npn-spdy/2
DESIGN MISTAKES?
VERSIONING TO THE RESCUE
VERSIONING TO THE RESCUE
VERSIONING TO THE RESCUE
VERSIONING TO THE RESCUE
How to detect the version?
http://api.example.com/v1/โ€ฆ 
How to detect the version?
SIMPLE 
How to detect the version?
BUT HOW TO DETECT IT? 
How to detect the version?
DETECTING THE VERSION
DETECTING THE VERSION 
Here it belongs to 
the route/controller, you need 
it at the 
Request level
USE A HEADER! 
How to detect the version?
DETECTING THE VERSION
LET NGINX DO THE JOB
LET NGINX DO THE JOB 
$req->getHeader(โ€˜API-Version)
LET NGINX DO THE JOB 
api.example.com/v1/customers
LET NGINX DO THE JOB 
api.example.com/customers 
API-Version: 1
LET NGINX DO THE JOB 
Without polluting 
your router or controller class
โ€œ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โ€ 
AT ALL.
โ€œI beg to differโ€ 
How it impacts the 
design of your 
software matters
4. BE PRAGMATIC
GET or POST?
GET or POST? 
api. example.com/login/?username=cirpo&login=wunderbar
5.TESTING
cURL is your best friend 
curl -X GET https://api.example.com/products 
curl -X POST https://api.example com/order -data=โ€{...}โ€ 
curl -X DELETE ... 
curl -X PATCH ...
cURL is your best friend
PHP 
cuzzle 
cURL command 
from Guzzle requests 
github.com/namshi/cuzzle
cURL is your best friend
cURL is your best friend
cURL is your best friend
HTTPARTY
HTTPIE
Javascript 
mockserver 
mock your APIs 
in a matter of seconds! 
github.com/namshi/mockserver
Javascript 
mockserver
Javascript 
users_GET.mock file 
mockserver
Javascript 
mockserver
TESTING APIS
Android 2.3 native browserโ€ฆ
TESTING APIS
TESTING APIS 
you can even 
decrypt the https responses :)
Javascript 
shisha 
smoke tests made easy! 
github.com/namshi/shish
Javascript 
shisha 
.smoke file
Javascript 
shisha
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!
HTTP METHOD 
POST or PUT?
HTTP METHOD 
PUT or PATCH?
USER TAGS 
/users/johnny/tags
USER TAGS 
deleting a non-existent tag: 
200, 204 or 404?
USER TAGS 
ON STACKOVERFLOW 
THEYโ€™RE 
deleting a non-existent tag: 
STILL FIGHTING 
200, 204 or 404? 
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 GOD AT ALL!
STICK WITH PLURALS!
NAMING 
/users1 
/users 
/orders/1 
/orders
NAMING 
/cities/1 
/cities 
/curricula/1 
/curricula
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 
/orders/15 
AVOID INCREMENTAL 
NUMBERS 
/orders/A323K833 
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
CODEBASE ORGANIZATION 
BUNDLES 
product 
checkout 
warehouse 
generic 
entity
CODEBASE ORGANIZATION 
APP 
product 
BUNDLES 
checkout 
warehouse 
generic 
entity
7. SCALABILITY
CACHE ALL THE THINGS!
MIDDLEWARE
MIDDLEWARE - CONNECT
MIDDLEWARE - STACK
AVOID SESSIONS
EVERYTHING AS A RESOURCE
8. ISSUES
CORS
CORS
(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/ 
(silly) browsers
โ€œstandardsโ€
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 
Donโ€™t play with fire 
{ 
โ€œemail"=>"alessandro.cinelli@gmail.com", 
"firstName"=>"Alessandro", 
"lastName"=>"Cinelli", 
โ€œbirthdayโ€=>"14/09/1985", 
}
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", 
... 
] 
Security matters
Avoid [...] 
http://bit.ly/json-hijacking 
Security matters
USE {โ€ฆ} 
Security matters
Thatโ€™s all folks
/ 
github.com/cirpo 
@cirpo
tech.namshi.com/join-us 
we are hiring! 
tech.namshi.com 
github.com/namshi 
twitter.com/TechNamshi
THANKS
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

What's hot

Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
Rob Davarnia
ย 

What's hot (20)

Phalcon Framework: San Antonio Web Developers Group
Phalcon Framework: San Antonio Web Developers Group Phalcon Framework: San Antonio Web Developers Group
Phalcon Framework: San Antonio Web Developers Group
ย 
The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)The next step from Microsoft - Vnext (Srdjan Poznic)
The next step from Microsoft - Vnext (Srdjan Poznic)
ย 
Monorepo: React + React Native. React Alicante
Monorepo:  React + React Native. React Alicante Monorepo:  React + React Native. React Alicante
Monorepo: React + React Native. React Alicante
ย 
Blazor v1.1
Blazor v1.1Blazor v1.1
Blazor v1.1
ย 
Complete guide of python development
Complete guide of python developmentComplete guide of python development
Complete guide of python development
ย 
Codegen2021 blazor mobile
Codegen2021 blazor mobileCodegen2021 blazor mobile
Codegen2021 blazor mobile
ย 
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
ย 
Beginning MEAN Stack
Beginning MEAN StackBeginning MEAN Stack
Beginning MEAN Stack
ย 
Modern Web Application Development Workflow - EclipseCon France 2014
Modern Web Application Development Workflow - EclipseCon France 2014Modern Web Application Development Workflow - EclipseCon France 2014
Modern Web Application Development Workflow - EclipseCon France 2014
ย 
WordPress 4.4 and Beyond
WordPress 4.4 and BeyondWordPress 4.4 and Beyond
WordPress 4.4 and Beyond
ย 
Untangling spring week12
Untangling spring week12Untangling spring week12
Untangling spring week12
ย 
Ultra-modern Front-end Dev & Introducing Spar
Ultra-modern Front-end Dev & Introducing SparUltra-modern Front-end Dev & Introducing Spar
Ultra-modern Front-end Dev & Introducing Spar
ย 
A Gentle Introduction to Blazor
A Gentle Introduction to BlazorA Gentle Introduction to Blazor
A Gentle Introduction to Blazor
ย 
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
Modern Web Applications Utilizing HTML5 (Dev Con TLV 06-2013)
ย 
Web development with Python
Web development with PythonWeb development with Python
Web development with Python
ย 
DevDay 2018 - Blazor
DevDay 2018 - BlazorDevDay 2018 - Blazor
DevDay 2018 - Blazor
ย 
Basic concepts for python web development
Basic concepts for python web developmentBasic concepts for python web development
Basic concepts for python web development
ย 
MEAN Stack
MEAN Stack MEAN Stack
MEAN Stack
ย 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
ย 
PWA basics for developers
PWA basics for developersPWA basics for developers
PWA basics for developers
ย 

Similar to Don't screw it up! How to build durable API

Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)
Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)
Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)
Alessandro Nadalin
ย 
URL Design
URL DesignURL Design
URL Design
Walter Ebert
ย 

Similar to Don't screw it up! How to build durable API (20)

Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)
Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)
Don't screw it up: how to build durable web apis @ PHPDay 2014 in Verona (ITA)
ย 
Don't screw it up: how to build durable web apis
Don't screw it up: how to build durable web apisDon't screw it up: how to build durable web apis
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 Rails
ย 
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
ย 
Designing & Building Secure Web APIs
Designing & Building Secure Web APIsDesigning & Building Secure Web APIs
Designing & Building Secure Web APIs
ย 
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
ย 
Top Cordova Challenges and How to Tackle Them
Top Cordova Challenges and How to Tackle ThemTop Cordova Challenges and How to Tackle Them
Top Cordova Challenges and How to Tackle Them
ย 
State ofappdevelopment
State ofappdevelopmentState ofappdevelopment
State ofappdevelopment
ย 
Composer at Scale, Release and Dependency Management
Composer at Scale, Release and Dependency ManagementComposer at Scale, Release and Dependency Management
Composer at Scale, Release and Dependency Management
ย 
Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!Frontend Monoliths: Run if you can!
Frontend Monoliths: Run if you can!
ย 
Building a full-stack app with Golang and Google Cloud Platform in oneย week
Building a full-stack app with Golang and Google Cloud Platform in oneย weekBuilding a full-stack app with Golang and Google Cloud Platform in oneย week
Building a full-stack app with Golang and Google Cloud Platform in oneย week
ย 
Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!Modern Release Engineering in a Nutshell - Why Researchers should Care!
Modern Release Engineering in a Nutshell - Why Researchers should Care!
ย 
Angular js mobile jsday 2014 - Verona 14 may
Angular js mobile   jsday 2014 - Verona 14 mayAngular js mobile   jsday 2014 - Verona 14 may
Angular js mobile jsday 2014 - Verona 14 may
ย 
2022 APIsecure_Securing APIs with Open Standards
2022 APIsecure_Securing APIs with Open Standards2022 APIsecure_Securing APIs with Open Standards
2022 APIsecure_Securing APIs with Open Standards
ย 
Apache Flex and the imperfect Web
Apache Flex and the imperfect WebApache Flex and the imperfect Web
Apache Flex and the imperfect Web
ย 
URL Design
URL DesignURL Design
URL Design
ย 
Building Rich Applications with Appcelerator
Building Rich Applications with AppceleratorBuilding Rich Applications with Appcelerator
Building Rich Applications with Appcelerator
ย 
Open event (show&tell april 2016)
Open event (show&tell april 2016)Open event (show&tell april 2016)
Open event (show&tell april 2016)
ย 
Laurentiu macovei meteor. a better way of building apps
Laurentiu macovei   meteor. a better way of building appsLaurentiu macovei   meteor. a better way of building apps
Laurentiu macovei meteor. a better way of building apps
ย 
FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...
FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...
FFWD.PRO - It's not you, It's me (or how to avoid being coupled with a Javasc...
ย 

More from 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)
ย 
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
Alessandro Cinelli (cirpo)
ย 
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
Alessandro Cinelli (cirpo)
ย 

More from Alessandro Cinelli (cirpo) (14)

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
ย 
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
ย 
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

Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
SUHANI PANDEY
ย 
Call Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort Service
Call Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort ServiceCall Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort Service
Call Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
ย 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
SUHANI PANDEY
ย 
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRLLucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
imonikaupta
ย 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
ย 
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
SUHANI PANDEY
ย 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
SUHANI PANDEY
ย 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
ย 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
SUHANI PANDEY
ย 
โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...
โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...
โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...
Diya Sharma
ย 

Recently uploaded (20)

VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...
VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...
VVVIP Call Girls In Connaught Place โžก๏ธ Delhi โžก๏ธ 9999965857 ๐Ÿš€ No Advance 24HRS...
ย 
Al Barsha Night Partner +0567686026 Call Girls Dubai
Al Barsha Night Partner +0567686026 Call Girls  DubaiAl Barsha Night Partner +0567686026 Call Girls  Dubai
Al Barsha Night Partner +0567686026 Call Girls Dubai
ย 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
ย 
Call Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort Service
Call Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort ServiceCall Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort Service
Call Girls in Prashant Vihar, Delhi ๐Ÿ’ฏ Call Us ๐Ÿ”9953056974 ๐Ÿ” Escort Service
ย 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
ย 
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRLLucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
Lucknow โคCALL GIRL 88759*99948 โคCALL GIRLS IN Lucknow ESCORT SERVICEโคCALL GIRL
ย 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
ย 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
ย 
Enjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort Service
Enjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort ServiceEnjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort Service
Enjoy NightโšกCall Girls Samalka Delhi >เผ’8448380779 Escort Service
ย 
All Time Service Available Call Girls Mg Road ๐Ÿ‘Œ โญ๏ธ 6378878445
All Time Service Available Call Girls Mg Road ๐Ÿ‘Œ โญ๏ธ 6378878445All Time Service Available Call Girls Mg Road ๐Ÿ‘Œ โญ๏ธ 6378878445
All Time Service Available Call Girls Mg Road ๐Ÿ‘Œ โญ๏ธ 6378878445
ย 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
ย 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
ย 
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
VVIP Pune Call Girls Mohammadwadi WhatSapp Number 8005736733 With Elite Staff...
ย 
Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
Call Now โ˜Ž 8264348440 !! Call Girls in Green Park Escort Service Delhi N.C.R.
ย 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
ย 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
ย 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
ย 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
ย 
โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...
โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...
โ‚น5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] ๐Ÿ”|97111...
ย 
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
ย 

Don't screw it up! How to build durable API