Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Api Builder - Scala Up North 2017
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
sullis
July 21, 2017
Technology
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Api Builder - Scala Up North 2017
July 21, 2017
Scala Up North
Vancouver BC
#scala #apibuilder #rest #canada
sullis
July 21, 2017
More Decks by sullis
See All by sullis
Dependency Management for Java - Code Remix Summit 2026-05-12
sullis
0
86
AI Assisted Software Development - Portland Java User Group - 2026-04-14
sullis
0
94
Dependency Management for Java - Seattle 2025-11-18
sullis
0
64
Dependency Management for Java - Portland - 2025-11-04
sullis
0
45
Dependency management for Java applications 2025-09-11
sullis
0
63
S3 NYC Iceberg meetup 2025-07-10
sullis
0
66
Amazon S3 Chicago 2025-06-04
sullis
0
160
Amazon S3 Boston 2025-05-07
sullis
0
120
Netty ConFoo Montreal 2025-02-27
sullis
0
190
Other Decks in Technology
See All in Technology
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
3
1.9k
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
280
omasushiというライブラリを作った
polidog
PRO
0
150
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
120
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
110
Azure Cost Management の FOCUS コストデータを迷わず読むための“3つの軸”
tetsuyaooooo
0
160
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
280
module Synths; end
asonas
1
130
enechainの内製セルフサービスプラットフォーム
hiyosi
0
140
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
140
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
220
10分で知る最近のOmarchy
komagata
0
160
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
A Soul's Torment
seathinner
7
3.6k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Designing Experiences People Love
moore
143
24k
The Language of Interfaces
destraynor
162
27k
How STYLIGHT went responsive
nonsquared
100
6.3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Faster Mobile Websites
deanohume
310
32k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
930
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
450
Transcript
Sean Sullivan July 21, 2017 Scala Up North
• software engineer • 21 years on the JVM •
back office systems @ HBC About me
https://en.wikipedia.org/wiki/Hudson%27s_Bay_Company
None
saksfifthavenue.com saksoff5th.com lordandtaylor.com gilt.com thebay.com
API driven development
API descriptors
API descriptors are not a new concept
• 2000: WSDL 1.0 (SOAP) • 2006: WADL (REST) •
2011: Swagger (REST) • 2014: ApiDoc (REST) • 2017: ApiDoc rebranded to ApiBuilder
www.apibuilder.io
None
describe REST API in a JSON file
1. start by describing your models 2. map your models
to resources
"models": { "credit_card": { "fields": [ { "name": "guid", "type":
"uuid" }, { "name": "user_guid", "type": "uuid" }, { "name": "type", "type": "credit_card_type" }, { "name": "issuer", "type": “string", “required": false }, { "name": "last_four", "type": "string" }, { "name": "expire_date", "type": "string" }, { "name": "billing_address", "type": "address" } ] } }
"resources": { "credit_card": { "operations": [ { "method": "GET", "path":
"/:guid", "description": "Get a credit card.", "responses": { "200": { "type": "credit_card" }, "404": { "type": “unit”, "description": "Card not found." } } } }
gilt.com
www.gilt.com
• Rails app • one Git repo • monolith! Gilt:
2007 => 2008
• Rails app • JSP web framework • ~10 services
(Java) • handcrafted Java clients • weak typing (java.util.HashMap) Gilt: 2009 => 2010
• JSP’s • 100+ services (Java, Scala) • strongly typed
client libraries • Gilt “Commons” library Gilt: 2011 => 2013
• Gilt Commons library • 250+ services • binary coupling
• dependency hell • ApiBuilder project started on Github Gilt: 2014
Dependency hell Java runtime hell
• java.lang.NoClassDefFoundError • java.lang.NoSuchFieldError • java.lang.NoSuchMethodError Java runtime hell
Dependency hell kills productivity
None
Mitigating dependency hell • API design must be first class
• backwards and forward compatibility • accurate documentation • generated client libraries
• 350+ services • new services built with ApiBuilder +
generated clients • Gilt Commons library is deprecated Gilt: 2015 => 2017
Web Checkout Android Checkout iPhone Checkout Checkout service api.json
Generating client libraries with ApiBuilder
Code generators
None
Scala client generators • Http4s + Circe JSON • Ning
AsyncHttpClient {1.8, 1.9} • Play WS {2.2, 2.3, 2.4, 2.5, 2.6}
None
Conclusion • API driven development • visit www.apibuilder.io
The end
None
Bonus material
Gilt 2015