SlideShare a Scribd company logo
1 of 78
Download to read offline
BACK FROM THE DEAD:
HTTP BUILDER NG
NoamTenne
$WHOAMI
Hacking around the JVM for the past ~15Years
healthy.io



@NoamTenne
http://blog.10ne.org
LET’S ROLL
http://bit.ly/2kmffDe
A SHOW OF HANDS
http://bit.ly/2nK3I4v
HTTPBUILDER
http://read.bi/2kmcYaZ
Haha! Good one,
HTTPBuilder!
HTTP BUILDER NG
http://bit.ly/2l1hjzN
HTTP BUILDER NG
Source:
github.com/http-builder-ng/http-builder-ng
Docs:
http-builder-ng.github.io/http-builder-ng/
MEETTHE PEOPLE
IMPLEMENTATIONS
Core
INSTALLATION
INSTALLATION
compile 'io.github.http-builder-ng:http-builder-ng-core:0.14.1'
INSTALLATION
compile 'io.github.http-builder-ng:http-builder-ng-core:0.14.1'
compile 'io.github.http-builder-ng:http-builder-ng-apache:0.14.1'
INSTALLATION
compile 'io.github.http-builder-ng:http-builder-ng-core:0.14.1'
compile 'io.github.http-builder-ng:http-builder-ng-apache:0.14.1'
compile 'io.github.http-builder-ng:http-builder-ng-okhttp:0.14.1'
INITIALIZATION - CORE
import groovyx.net.http.HttpBuilder
class Core {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure()
}
}
INITIALIZATION - CORE
import groovyx.net.http.HttpBuilder
class Core {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure()
}
}
Consistent namespace
INITIALIZATION - CORE
import groovyx.net.http.HttpBuilder
class Core {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure()
}
}
Consistent namespace
Consistent
configuration method
INITIALIZATION - APACHE
import groovyx.net.http.ApacheHttpBuilder
import groovyx.net.http.HttpBuilder
class Apache {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new ApacheHttpBuilder(c)
})
}
}
INITIALIZATION - APACHE
import groovyx.net.http.ApacheHttpBuilder
import groovyx.net.http.HttpBuilder
class Apache {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new ApacheHttpBuilder(c)
})
}
} Factory function for
configuration
INITIALIZATION - OKHTTP
import groovyx.net.http.HttpBuilder
import groovyx.net.http.OkHttpBuilder
class Ok {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new OkHttpBuilder(c)
})
}
}
INITIALIZATION - OKHTTP
import groovyx.net.http.HttpBuilder
import groovyx.net.http.OkHttpBuilder
class Ok {
private HttpBuilder httpBuilder
void init() {
httpBuilder = HttpBuilder.configure({ c ->
new OkHttpBuilder(c)
})
}
} Same factory.

Different Impl
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.get()
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.get()
Configure can access
request
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.post({
request.uri.path = '/api'
response.success({})
})
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.post({
request.uri.path = '/api'
response.success({})
})
Method may extend
request config
INITIALIZED! NOW WHAT?
def result = HttpBuilder.configure({
request.uri = 'http://serenity.ship'
})
.post({
request.uri.path = '/api'
response.success({})
})
Method may extend
request config
Method may also hook
to response events
GREAT!
BUT LET’S SEETHE GOOD STUFF
GREAT!
BUT LET’S SEETHE GOOD STUFF
HEADER PARSERS
if (headerName == 'Last-Modified') {
//Construct proper date pattern and parse
} else if (headerName == 'Age') {
//Parse long
} else if (headerName == 'Content-Disposition') {
//Parse and assemble map
}
HEADER PARSERS
Easily parse commonly used headers such as:
HEADER PARSERS
Easily parse commonly used headers such as:
Allow -> CsvList
HEADER PARSERS
Easily parse commonly used headers such as:
Last-Modified -> HttpDate
Allow -> CsvList
HEADER PARSERS
Easily parse commonly used headers such as:
Last-Modified -> HttpDate
Allow -> CsvList
Cache-Control -> MapPairs
HEADER PARSERS
Easily parse commonly used headers such as:
Last-Modified -> HttpDate
Allow -> CsvList
Cache-Control -> MapPairs
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
Declare return type
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
Declare return type
Find the relevant
header
HEADER PARSERS
ZonedDateTime date = HttpBuilder.configure {
request.uri = 'https://google.com'
}
.head(ZonedDateTime) {
response.success { FromServer resp ->
resp.headers.find({ h ->
h.key == 'Date'
}).parse()
}
}
Declare return type
Find the relevant
headerJust
call .parse()
CONTENT PARSERS
CONTENT PARSERS
Auto parse response content according to type:
CONTENT PARSERS
Auto parse response content according to type:
HTML
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON XML
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON
CSV
XML
CONTENT PARSERS
Auto parse response content according to type:
HTML
JSON
CSV
XML
Text
CONTENT PARSERS
Register custom parsers per content type!
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
call .parser()
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
call .parser()
Specify content
type
CONTENT PARSERS
Register custom parsers per content type!
def inflated = HttpBuilder.configure {
request.uri = 'http://serenity.com/bundle.zip'
}
.get(String) {
response.parser('application/zip') { config, fromServer ->
def inflaterStream = new GZIPInputStream(fromServer.inputStream)
inflaterStream.getText('UTF-8')
}
}
call .parser()
Specify content
type
Provide closure to
handle content
REQUEST INTERCEPTORS
Perform an operation on every response received
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Call interceptor
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Call interceptor
Specify method
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Call interceptor
Specify method Access config and
actual function
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
} Do the business
REQUEST INTERCEPTORS -
SINGLETYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
execution.interceptor(GET) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
} Do the business
3. PROFIT
REQUEST INTERCEPTORS -
ANYTYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
REQUEST INTERCEPTORS -
ANYTYPE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
println "${cfg.request.uri.toURI()} was requested"
fx.apply(cfg)
}
}
Apply to multiple
methods
REQUEST INTERCEPTORS -
MODIFY RESPONSE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
def result = fx.apply(cfg)
"magic:marker:${result}"
}
}
REQUEST INTERCEPTORS -
MODIFY RESPONSE
HttpBuilder.configure {
request.uri = 'http://google.com'
HttpVerb[] verbs = [GET, POST, PUT, DELETE]
execution.interceptor(verbs) { cfg, fx ->
def result = fx.apply(cfg)
"magic:marker:${result}"
}
}
Modify the value!
REQUEST ENCODERS
Perform an operation on every request sent
REQUEST ENCODERS
{
"body": {},
"metadata": {
"clientId": "abcdef123456789"
}
}
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
call .encoder()
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
call .encoder() Specify content type
REQUEST ENCODERS
HttpBuilder.configure {
request.uri = 'http://serenity.com/report'
request.encoder('application/json') { config, ToServer req ->
def w = "{"body":${config.request.body},"clientId": ”bla""
req.toServer(new ByteArrayInputStream(w.bytes))
}
}
Modified content
back to the server
handle
BONUS: CAN BE USED BY JAVA
Use Java 8 lambdas or function objects
BONUS: DIY
BONUS: DIY
extends groovyx.net.http.HttpBuilder
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
Retrieve client
configuration
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
public abstract Executor getExecutor()
Retrieve client
configuration
BONUS: DIY
protected abstract ChainedHttpConfig getObjectConfig()
public abstract Executor getExecutor()
Provides a threading
interface
Retrieve client
configuration
BONUS: DIY
protected abstract Object doGet(final ChainedHttpConfig config)
protected abstract Object doHead(final ChainedHttpConfig config)
protected abstract Object doPost(final ChainedHttpConfig config)
protected abstract Object doPut(final ChainedHttpConfig config)
protected abstract Object doDelete(final ChainedHttpConfig config)
BONUS:TESTABLE
EXAMPLES
HTTPBuilder NG: Back From The Dead
HTTPBuilder NG: Back From The Dead

More Related Content

What's hot

Going Reactive with gRPC
Going Reactive with gRPCGoing Reactive with gRPC
Going Reactive with gRPCAndres Almiray
 
Storing tree structures with MongoDB
Storing tree structures with MongoDBStoring tree structures with MongoDB
Storing tree structures with MongoDBVyacheslav
 
MongoDB Europe 2016 - Graph Operations with MongoDB
MongoDB Europe 2016 - Graph Operations with MongoDBMongoDB Europe 2016 - Graph Operations with MongoDB
MongoDB Europe 2016 - Graph Operations with MongoDBMongoDB
 
Webinar: Working with Graph Data in MongoDB
Webinar: Working with Graph Data in MongoDBWebinar: Working with Graph Data in MongoDB
Webinar: Working with Graph Data in MongoDBMongoDB
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]MongoDB
 
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB
 
Successful DB migrations with Liquibase
 Successful DB migrations with Liquibase Successful DB migrations with Liquibase
Successful DB migrations with LiquibaseIllia Seleznov
 
Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄
Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄
Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄Χρήστος Χαρμπής
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlinintelliyole
 
εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης
εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης
εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης iodinou
 
Web Security Horror Stories
Web Security Horror StoriesWeb Security Horror Stories
Web Security Horror StoriesSimon Willison
 
εργασία για την ανακύκλωση
εργασία για την ανακύκλωσηεργασία για την ανακύκλωση
εργασία για την ανακύκλωσηdora222
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作るTaketo Sano
 
MongoDB World 2019: The Sights (and Smells) of a Bad Query
MongoDB World 2019: The Sights (and Smells) of a Bad QueryMongoDB World 2019: The Sights (and Smells) of a Bad Query
MongoDB World 2019: The Sights (and Smells) of a Bad QueryMongoDB
 
JavaScript
JavaScriptJavaScript
JavaScriptSunil OS
 
01 sm3 xml_xp_02
01 sm3 xml_xp_0201 sm3 xml_xp_02
01 sm3 xml_xp_02Niit Care
 
Με πινέλα και φαντασία 2
Με πινέλα και φαντασία 2Με πινέλα και φαντασία 2
Με πινέλα και φαντασία 2MariaGeorgiou68
 

What's hot (20)

Going Reactive with gRPC
Going Reactive with gRPCGoing Reactive with gRPC
Going Reactive with gRPC
 
Storing tree structures with MongoDB
Storing tree structures with MongoDBStoring tree structures with MongoDB
Storing tree structures with MongoDB
 
MongoDB Europe 2016 - Graph Operations with MongoDB
MongoDB Europe 2016 - Graph Operations with MongoDBMongoDB Europe 2016 - Graph Operations with MongoDB
MongoDB Europe 2016 - Graph Operations with MongoDB
 
Webinar: Working with Graph Data in MongoDB
Webinar: Working with Graph Data in MongoDBWebinar: Working with Graph Data in MongoDB
Webinar: Working with Graph Data in MongoDB
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
MongoDB Analytics: Learn Aggregation by Example - Exploratory Analytics and V...
 
Successful DB migrations with Liquibase
 Successful DB migrations with Liquibase Successful DB migrations with Liquibase
Successful DB migrations with Liquibase
 
Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄
Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄
Γλώσσα Ε΄ 17.1. ΄΄ Ο άνθρωπος στο διάστημα ΄΄
 
Mongodb replication
Mongodb replicationMongodb replication
Mongodb replication
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης
εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης
εισαγωγη στην περιβαλλοντική εκπ/ση και τις βιωματικές πρακτικές μάθησης
 
Web Security Horror Stories
Web Security Horror StoriesWeb Security Horror Stories
Web Security Horror Stories
 
εργασία για την ανακύκλωση
εργασία για την ανακύκλωσηεργασία για την ανακύκλωση
εργασία για την ανακύκλωση
 
何もないところから数を作る
何もないところから数を作る何もないところから数を作る
何もないところから数を作る
 
Design pattern cheat sheet
Design pattern cheat sheetDesign pattern cheat sheet
Design pattern cheat sheet
 
MongoDB World 2019: The Sights (and Smells) of a Bad Query
MongoDB World 2019: The Sights (and Smells) of a Bad QueryMongoDB World 2019: The Sights (and Smells) of a Bad Query
MongoDB World 2019: The Sights (and Smells) of a Bad Query
 
JavaScript
JavaScriptJavaScript
JavaScript
 
01 sm3 xml_xp_02
01 sm3 xml_xp_0201 sm3 xml_xp_02
01 sm3 xml_xp_02
 
Με πινέλα και φαντασία 2
Με πινέλα και φαντασία 2Με πινέλα και φαντασία 2
Με πινέλα και φαντασία 2
 
Πάμπλο Πικάσο
Πάμπλο ΠικάσοΠάμπλο Πικάσο
Πάμπλο Πικάσο
 

Viewers also liked

Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers Budco Financial
 
Managed Services Model For IT Services
Managed Services Model For IT Services Managed Services Model For IT Services
Managed Services Model For IT Services Ajay Rathi
 
TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und MockitoTobias Trelle
 
5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico web5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico webMiguel Florido
 
HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017NVIDIA
 
Maral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at SwedenMaral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at SwedenMaral Kalajian
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsJonas Bonér
 
The Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer InterviewsThe Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer InterviewsGood Funnel
 
Kaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory SyndromeKaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory SyndromeJackson Reynolds
 
The Agile Team Onion
The Agile Team OnionThe Agile Team Onion
The Agile Team OnionEmily Webber
 
Create Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick VallaeysCreate Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick VallaeysSearch Marketing Expo - SMX
 
Global healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem JagyasiGlobal healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem JagyasiDr Prem Jagyasi
 
BigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worldsBigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worldsDimitri De Jonghe
 
Analytics for Clover POS Overview
Analytics for Clover POS OverviewAnalytics for Clover POS Overview
Analytics for Clover POS OverviewHrvoje Smolić
 

Viewers also liked (20)

Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers Financial Strategies for Healthcare Providers
Financial Strategies for Healthcare Providers
 
Managed Services Model For IT Services
Managed Services Model For IT Services Managed Services Model For IT Services
Managed Services Model For IT Services
 
TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und Mockito
 
5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico web5 Estrategias para aumentar x4 tu tráfico web
5 Estrategias para aumentar x4 tu tráfico web
 
HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017HPC Top 5 Stories: March 29, 2017
HPC Top 5 Stories: March 29, 2017
 
Maral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at SwedenMaral Kalajian Keynote talk at The Influencer Convention at Sweden
Maral Kalajian Keynote talk at The Influencer Convention at Sweden
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
Scalability, Availability & Stability Patterns
Scalability, Availability & Stability PatternsScalability, Availability & Stability Patterns
Scalability, Availability & Stability Patterns
 
Hoofdzaken App
Hoofdzaken AppHoofdzaken App
Hoofdzaken App
 
The Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer InterviewsThe Marketer's Guide To Customer Interviews
The Marketer's Guide To Customer Interviews
 
Kaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory SyndromeKaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
Kaposi Sarcoma in Immune Reconstitution Inflammatory Syndrome
 
Heritage
HeritageHeritage
Heritage
 
The Agile Team Onion
The Agile Team OnionThe Agile Team Onion
The Agile Team Onion
 
Create Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick VallaeysCreate Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
Create Powerful Custom Automations With AdWords Scripts By Frederick Vallaeys
 
Global healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem JagyasiGlobal healthcare future, technology, trends and innovation by Dr Prem Jagyasi
Global healthcare future, technology, trends and innovation by Dr Prem Jagyasi
 
Head and shoulders
Head and shouldersHead and shoulders
Head and shoulders
 
BigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worldsBigchainDB and IoT at Bosch Connected worlds
BigchainDB and IoT at Bosch Connected worlds
 
Let's view tanzania
Let's view tanzaniaLet's view tanzania
Let's view tanzania
 
Maintenance academy v1
Maintenance academy v1Maintenance academy v1
Maintenance academy v1
 
Analytics for Clover POS Overview
Analytics for Clover POS OverviewAnalytics for Clover POS Overview
Analytics for Clover POS Overview
 

Similar to HTTPBuilder NG: Back From The Dead

ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4Jim Jagielski
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Ben Hall
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerOrtus Solutions, Corp
 
Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Ortus Solutions, Corp
 
Varnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites flyVarnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites flyPeter Keung
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphpdantleech
 
Java web programming
Java web programmingJava web programming
Java web programmingChing Yi Chan
 
Mojolicious - A new hope
Mojolicious - A new hopeMojolicious - A new hope
Mojolicious - A new hopeMarcus Ramberg
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardSV Ruby on Rails Meetup
 
Flask and Angular: An approach to build robust platforms
Flask and Angular:  An approach to build robust platformsFlask and Angular:  An approach to build robust platforms
Flask and Angular: An approach to build robust platformsAyush Sharma
 
Http capturing
Http capturingHttp capturing
Http capturingEric Ahn
 
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeAcademy
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?Remy Sharp
 
Spring data iii
Spring data iiiSpring data iii
Spring data iii명철 강
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparisonHiroshi Nakamura
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and PythonPiXeL16
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Masahiro Nagano
 
Tdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyTdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyFabio Akita
 

Similar to HTTPBuilder NG: Back From The Dead (20)

ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4ApacheConNA 2015: What's new in Apache httpd 2.4
ApacheConNA 2015: What's new in Apache httpd 2.4
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)
 
Server Side Swift: Vapor
Server Side Swift: VaporServer Side Swift: Vapor
Server Side Swift: Vapor
 
Into The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and dockerInto The Box 2018 Going live with commandbox and docker
Into The Box 2018 Going live with commandbox and docker
 
Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018Going live with BommandBox and docker Into The Box 2018
Going live with BommandBox and docker Into The Box 2018
 
Varnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites flyVarnish: Making eZ Publish sites fly
Varnish: Making eZ Publish sites fly
 
2019 11-bgphp
2019 11-bgphp2019 11-bgphp
2019 11-bgphp
 
Java web programming
Java web programmingJava web programming
Java web programming
 
Mojolicious - A new hope
Mojolicious - A new hopeMojolicious - A new hope
Mojolicious - A new hope
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
 
Flask and Angular: An approach to build robust platforms
Flask and Angular:  An approach to build robust platformsFlask and Angular:  An approach to build robust platforms
Flask and Angular: An approach to build robust platforms
 
Http capturing
Http capturingHttp capturing
Http capturing
 
Plack at YAPC::NA 2010
Plack at YAPC::NA 2010Plack at YAPC::NA 2010
Plack at YAPC::NA 2010
 
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level InterfacesKubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
KubeCon EU 2016: Kubernetes and the Potential for Higher Level Interfaces
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 
Spring data iii
Spring data iiiSpring data iii
Spring data iii
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparison
 
REST with Eve and Python
REST with Eve and PythonREST with Eve and Python
REST with Eve and Python
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
 
Tdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema RubyTdc 2013 - Ecossistema Ruby
Tdc 2013 - Ecossistema Ruby
 

More from noamt

We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)noamt
 
Go Modules
Go ModulesGo Modules
Go Modulesnoamt
 
Functional Groovy
Functional GroovyFunctional Groovy
Functional Groovynoamt
 
We Need A Better Testing Framework
We Need A Better Testing FrameworkWe Need A Better Testing Framework
We Need A Better Testing Frameworknoamt
 
Python Peculiarities
Python PeculiaritiesPython Peculiarities
Python Peculiaritiesnoamt
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean Codenoamt
 
Searching for the grail
Searching for the grailSearching for the grail
Searching for the grailnoamt
 

More from noamt (7)

We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)We Need A Better Testing Framework (2019)
We Need A Better Testing Framework (2019)
 
Go Modules
Go ModulesGo Modules
Go Modules
 
Functional Groovy
Functional GroovyFunctional Groovy
Functional Groovy
 
We Need A Better Testing Framework
We Need A Better Testing FrameworkWe Need A Better Testing Framework
We Need A Better Testing Framework
 
Python Peculiarities
Python PeculiaritiesPython Peculiarities
Python Peculiarities
 
Groovy Powered Clean Code
Groovy Powered Clean CodeGroovy Powered Clean Code
Groovy Powered Clean Code
 
Searching for the grail
Searching for the grailSearching for the grail
Searching for the grail
 

Recently uploaded

Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROmotivationalword821
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 

Recently uploaded (20)

Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
How To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTROHow To Manage Restaurant Staff -BTRESTRO
How To Manage Restaurant Staff -BTRESTRO
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 

HTTPBuilder NG: Back From The Dead