Portland Java User Group July 18, 2017 Portland Oregon #rest #java #scala #json #gilt #apibuilder
Sean SullivanJuly 18, 2017Portland Java User Group
View Slide
• software engineer• 21 years on the JVM• back office systems @ HBCAbout me
https://en.wikipedia.org/wiki/Hudson%27s_Bay_Company
saksfifthavenue.comsaksoff5th.comlordandtaylor.comgilt.comthebay.com
API driven development
API descriptors
API descriptorsare not a new concept
• 1996: CORBA 2.0 IDL• 1997: Java RMI remote interfaces• 1999: EJB remote interfaces• 2000: WSDL 1.0 (SOAP)
• 2006: WADL (REST)• 2011: Swagger (REST)• 2014: ApiDoc (REST)• 2017: ApiDoc rebranded to ApiBuilder
www.apibuilder.io
describe REST APIin a JSON file
1. start by describing your models2. map your models to resources
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” libraryGilt: 2011 => 2013
• Gilt Commons library• 250+ services• dependency hell• ApiBuilder project started onGithubGilt: 2014
Dependency hellJava runtime hell
• java.lang.NoClassDefFoundError• java.lang.NoSuchFieldError• java.lang.NoSuchMethodErrorJava runtime hell
Dependency hellkills productivity
Mitigatingdependency hell• API design must be first class• backwards and forward compatibility• accurate documentation• generated client libraries
• 350+ services• new services built withApiBuilder + generated clients• Gilt Commons library isdeprecatedGilt: 2015 => 2017
WebCheckoutAndroidCheckoutiPhoneCheckoutCheckoutserviceapi.json
Generatingclient librarieswith ApiBuilder
Code generators
Conclusion• API driven development• visit www.apibuilder.io
The end
Additional resources
Gilt 2013
Gilt 2015