Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Api Builder - Scala Up North 2017
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
sullis
July 21, 2017
Technology
450
0
Share
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
42
AI Assisted Software Development - Portland Java User Group - 2026-04-14
sullis
0
49
Dependency Management for Java - Seattle 2025-11-18
sullis
0
45
Dependency Management for Java - Portland - 2025-11-04
sullis
0
29
Dependency management for Java applications 2025-09-11
sullis
0
47
S3 NYC Iceberg meetup 2025-07-10
sullis
0
56
Amazon S3 Chicago 2025-06-04
sullis
0
130
Amazon S3 Boston 2025-05-07
sullis
0
100
Netty ConFoo Montreal 2025-02-27
sullis
0
160
Other Decks in Technology
See All in Technology
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
580
Databricks 月刊サービスアップデートまとめ 2026年04月号
tyosi1212
0
120
iOS・Androidの文字サイズ設定をWebViewに!モバイルUIのアクセシビリティTips
shincarpediem
2
100
セキュリティ対策、何からはじめる? CloudNative環境の脅威モデリングと リスク評価実践入門 #cloudnativekaigi
varu3
5
880
Tachikawa.any 運営挨拶
daitasu
0
170
続 運用改善、不都合な真実 〜 物理制約のない運用改善はほとんど無価値 / 20260518-ssmjp-kaizen-no-value-without-physical-constraints
opelab
2
180
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
200
CyberAgent YJC Connect
shimaf4979
1
180
「強制アップデート」か「チームの自律」か?エンタープライズが辿り着いたプラットフォームのハイブリッド運用/cloudnative-kaigi-hybrid-platform-operations
mhrtech
0
200
O'Reilly Infrastructure & Ops Superstream: Platform Engineering for Developers, Architects & the Rest of Us
syntasso
0
130
20260515 ID管理は会社を守る大切な砦!〜🔰情シス向け〜
oidfj
0
400
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
3
1.4k
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
780
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
120
A Modern Web Designer's Workflow
chriscoyier
698
190k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
540
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
180
Facilitating Awesome Meetings
lara
57
6.8k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
160
Color Theory Basics | Prateek | Gurzu
gurzu
0
310
Joys of Absence: A Defence of Solitary Play
codingconduct
1
360
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
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