sgce 2015 rest apis

63
Enlighten your software REST API design & dev Domingo Suárez Torres @domix http://github.com/domix http://domingosuarez.com Una propuesta de: “Como construir APIs REST para sistemas distribuidos con alta escalabilidad y resilencia" 1/jul/2015

Upload: domingo-suarez-torres

Post on 06-Aug-2015

843 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: SGCE 2015 REST APIs

Enlighten your software

REST API design & dev

Domingo Suárez Torres @domix http://github.com/domix http://domingosuarez.com

Una propuesta de: “Como construir APIs REST para sistemas distribuidos con alta

escalabilidad y resilencia"

1/jul/2015

Page 2: SGCE 2015 REST APIs

Agenda• Preamble

• Disclaimer

• Context

• Motivation

• API

• Contract

• Programming model (architecture style)

Page 3: SGCE 2015 REST APIs

Preamble

Page 4: SGCE 2015 REST APIs

Disclaimer• This talk and its contents are based in my own

experience.

• I’m not trying to say all the following IS the way to do the right thing. Just my opinion. :)

• All I want is to share my experience with the community.

• This talk is huge. Hope I can finish on time.

Page 5: SGCE 2015 REST APIs

Context

• I’m not covering Hypermedia REST APIs

• I’m a JVM guy, so you will see lots of JVM references. Sorry.

Page 6: SGCE 2015 REST APIs

Motivation• Functional requirements is THE challenge.

• API Documentation is always a PITA, keep sync with the maintenance, new features, fixes, etc.

• Build any API (REST, SOAP, RPC) is hard.

• Development tools choice (programming language, libraries, frameworks, runtime, etc).

• Non functional requirements, quality attributes.

Page 7: SGCE 2015 REST APIs

SOAPNo longer an acronym. Since 1.2

Page 8: SGCE 2015 REST APIs

SOAP

• Characteristics

• Extensibility (security, routing)

• Neutrality (transport protocol)

• Independence (programming model)

Page 9: SGCE 2015 REST APIs

SOAP architecture• Several layers of specifications for:

• Message format

• Message Exchange Patterns

• Underlying transport protocol bindings

• Message processing models

• Protocol extensibility

Page 10: SGCE 2015 REST APIs

SOAP

• Web Services Description Language (WSDL)

• Universal Description Discovery and Integration (UDDI)

Page 11: SGCE 2015 REST APIs

SOAP

• Complex specification for vendors

• Developers take time to grok

• Sometimes very long time

• Misunderstanding of the guidelines.

Page 12: SGCE 2015 REST APIs

I like SOAP intentions

Page 13: SGCE 2015 REST APIs

I dislike SOAP complexity

Page 14: SGCE 2015 REST APIs

API Contract

Page 15: SGCE 2015 REST APIs

API Contract• Always is over there. Implicit/Explicit

• You should have one.

• You should know it.

• No matter if you build it or you consume the API.

• You should give it so much love.

• Learn to love it.

Page 16: SGCE 2015 REST APIs

API contract approaches

• Contract last

• Code driven contract

• Contract first

• Upfront design

Page 17: SGCE 2015 REST APIs

Contract last• Sadly is the commonest.

• Server-side developers dictate the contract.

• Most of the time with only one perspective.

• Implementator perspective VS consumer perpective

• Flaky. If missing test cases. Fragile.

• The documentation is done at the end.

• Bottleneck.

Page 18: SGCE 2015 REST APIs

Contract first• Upfront design API

• Consumer perspective design

• Reusability

• Versioning

• Performance

Page 19: SGCE 2015 REST APIs

The contract as corner stone for REST APIs

Page 20: SGCE 2015 REST APIs

How to build the contract?

Page 21: SGCE 2015 REST APIs

Tools

Page 22: SGCE 2015 REST APIs
Page 23: SGCE 2015 REST APIs
Page 24: SGCE 2015 REST APIs
Page 25: SGCE 2015 REST APIs

So many others :)

Page 26: SGCE 2015 REST APIs

RAML, my favorite• YAML dialect + JSON schema #ftw (types)

• Readable for humans.

• Can be procesable by machines.

• Design clear, correct, precise & consistent APIs.

• No vendor lock-in.

Page 27: SGCE 2015 REST APIs
Page 28: SGCE 2015 REST APIs
Page 29: SGCE 2015 REST APIs
Page 30: SGCE 2015 REST APIs
Page 31: SGCE 2015 REST APIs

Design & build

Page 32: SGCE 2015 REST APIs
Page 33: SGCE 2015 REST APIs
Page 34: SGCE 2015 REST APIs
Page 35: SGCE 2015 REST APIs
Page 36: SGCE 2015 REST APIs

raml + raml-mockupWe can deliver an API in days or hours

Page 37: SGCE 2015 REST APIs

RAML & code generation• Server side

• JAX-RS

• Client

• Square Retrofit

• Documentation

• HTML

Page 38: SGCE 2015 REST APIs

raml2code• OpenSource project from Grupo Expansión

• Generates Plain Old Java/Groovy Objects

• Generates JAX-RS interfases

• Generates an API client with Retrofit

• Can run in Android also in any JVM application.

Page 39: SGCE 2015 REST APIs
Page 40: SGCE 2015 REST APIs
Page 41: SGCE 2015 REST APIs

Nice, now I know how to create a contract. What’s next?

Page 42: SGCE 2015 REST APIs

Programming modelArchitecture

Page 43: SGCE 2015 REST APIs

SOA + EDA

Page 44: SGCE 2015 REST APIs

Services• Build, deploy, and monitor any kind of services in

agile, efficient way with open standards.

• Deployment on-premise, in the cloud, mix of both.

• Deploy services independently from each other.

• Decoupled & scale linearly across commodity hardware.

Page 45: SGCE 2015 REST APIs

Wait, a buzzword is coming…

Page 46: SGCE 2015 REST APIs

MicroServices architecture• Service Contracts

• RAML

• Exposing new & existing services

• Enterprise Integration Patterns (integration, routing, transformation)

• Discovery of services

• Service Registry

Page 47: SGCE 2015 REST APIs

MicroServices architecture• Coordination across services

• Event Bus, (smart service, dump pipe)

• Managing complex deployments and their scalability

• Build Tool, CI, DevOps (Chef, Puppet), Linux Containers, Cloud, monitoring

• Visibility and correlation across services

• Event correlation, ElasticSearch, Logstash, Kibana.

Page 48: SGCE 2015 REST APIs

Sounds nice, but…

Page 49: SGCE 2015 REST APIs
Page 50: SGCE 2015 REST APIs

Implementation details

Page 51: SGCE 2015 REST APIs

Spring Boot is awesome

Page 52: SGCE 2015 REST APIs

–Spring Boot reference documentation

“Spring Boot makes it easy to create stand-alone, production-grade Spring based

Applications that you can “just run”. We take an opinionated view of the Spring platform and

third-party libraries so you can get started with minimum fuss. Most Spring Boot applications

need very little Spring configuration.”

Page 53: SGCE 2015 REST APIs

Spring Boot• Embedded Servlet container

• Tomcat

• Jetty

• Undertow

• Executable jar file. Key feature for microservices!

• Monitoring capabilities thanks to actuator

• HealthChecks

• Metrics (Dropwizard aka Coda Hale Metrics)

• Jolokia

Page 54: SGCE 2015 REST APIs

Spring Boot & JAX-RS

• Jersey 2.x support out of the box

• Just use the Jersey Starter

• spring-boot-starter-jersey

• raml2code generates JAX-RS artifacts, remember?

Page 55: SGCE 2015 REST APIs

Spring Cloud• Distributed/versioned configuration

• Service registration and discovery

• Routing

• Service-to-service calls

• Load balancing

• Circuit Breakers

• Global locks

• Leadership election and cluster state

• Distributed messaging

Page 56: SGCE 2015 REST APIs

Netflix OSS• Netflix is released tons of good stuff.

• Reactive Extensions for Java

• Hystrix (Circuit breaker)

• Eureka (Service registry)

• Archaius (Configuration management)

• Zuul (Dynamic routing, monitoring, resilience, security)

• And many more…

Page 57: SGCE 2015 REST APIs

Spring Boot loves Netflix OSS

Page 58: SGCE 2015 REST APIs

Spring Boot & Spring Cloud for impatient developers

Page 59: SGCE 2015 REST APIs
Page 60: SGCE 2015 REST APIs

Demo

Page 61: SGCE 2015 REST APIs

Each circle is a Docker container

read/write

Hystrix send metrics

Turbine listen events

Turbine generates a http stream

Page 62: SGCE 2015 REST APIs

Acknowledgments• To all the platform team at Grupo Expansión

• Alvaro Cabrera (@pateketrueke)

• Anallely Olivares (@tsunllly)

• Angel Pimentel (@blzb)

• Eduardo Diaz (@iamedu)

• Tomás Salazar (@atomsfat)

Page 63: SGCE 2015 REST APIs

Enlighten your software

¿Preguntas?@domix

[email protected] http://github.com/domix

http://domingosuarez.com