Diseño de APIs con OpenAPI

Pedro J. Molina
Pedro J. MolinaFounder at Metadev en Metadev
Diseño de API
con OpenAPI
Pedro J. Molina
https://pjmolina.com
@pmolinamhttps://metadev.pro
¿Qué tienen en común estos modelos de negocios?
Librería 1
Librería 2
Tienda N
Servicio 1
Servicio 2
Servicio N
mLab
SendGrid
Plugin N
API
API
API
Ecosistema
Pedro J. Molina
@pmolinam
Agenda
 API Economy
 OpenAPI
 Casos de uso
 Versionado
 Futuro
API
Servicio públicos para que 3ºs puedan
consumirlos
Descripción técnica (orientado a devs)
Promueve la integración de sistemas
mediante contratos claros y
perdurables en el tiempo
Application Programmer Interface
API Economy
Las APIs definen plataformas.
Twitter, Twilio, Google Maps son ejemplos de APIs
abiertas que permiter a 3ºs integrarse con sus sistemas.
No puedes ganar sin ecosistema.
No puedes tener ecosistema sin API.
El primero que gana la cuota de mercado  gana el
juego.
API
API como contrato con clientes
APIs agnósticas de lenguaje
1. CORBA >> C + IDL
2. SOA >> XML + SOAP + WDSL …
3. REST >> JSON + HTTP
OpenAPI Initiative
Estándar de facto (Swagger)
Linux Foundation https://www.openapis.org
Descripción formal del contrato de un API REST consumible
por maquinas y humanos.
JSON o YAML
Diseño de APIs con OpenAPI
OpenAPI Initiative
Herramientas
Editor http://editor.swagger.io
Explorador de APIs http://petstore.swagger.io
Validador https://online.swagger.io/validator
Generadores opensource para
skeletons para backends
proxies para clientes o front-end
http://swagger.io/swagger-codegen
Casos de uso
1.API Legada
2.Contrato primero
3.Dirigida por el servicio
1. API Legada
Documentar un API existente
Construcción del contrato http://editor.swagger.io
Validación
Resultados:
API documentada
Generación de SDKs para cliente
API
1. API Legada. Ejemplo
¿Es Nieves un nombre de hombre o de mujer?
Servicio web para descubrirlo
http://www.jerolba.com/mujeres-y-hombres-y-serverless
GET https://us-central1-hombre-o-mujer.cloudfunctions.net/gender?name=nieves
Créditos: Jerónimo López @jerolba
API
swagger: '2.0'
info:
version: "1.0.0"
title: Hombre o mujer.
host: us-central1-hombre-o-mujer.cloudfunctions.net
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: Gender
description: API para no meter la pata con el género.
1. API Legada. Contrato API
http://bit.ly/genero-openapi
paths:
/gender:
get:
description: |
Devuelve la probabilidad de que el nombre indicado como parámetro sea de mujer u
hombre.
parameters:
- name: name
in: query
description: Nombre de la persona
required: true
type: string
responses:
# Response code
200:
description: Respuesta con exito
schema:
$ref: "#/definitions/GenderResponse"
404:
description: No encontrado
schema:
$ref: "#/definitions/GenderNotFoundResponse"
1. API Legada. Contrato API
totalMale:
type: number
format: int32
totalFemale:
type: number
format: int32
GenderNotFoundResponse:
required:
- name
- gender
properties:
name:
type: string
gender:
type: string
definitions:
GenderResponse:
required:
- name
- gender
- probability
- totalMale
- totalFemale
properties:
name:
type: string
gender:
type: string
probability:
type: number
format: float
1. API Legada. Contrato API
2. Contrato Primero
La especificación se escribe en primer lugar
http://editor.swagger.io
Puede generarse:
 un skeleton para el backend
 Un proxy o SDK para el cliente
Permite paralelizar el trabajo en backend y frontend.
Los cambios al contrato pueden versionarse adecuadamente.
API Cliente
2. Contrato Primero. Servidores disponibles
2. Contrato Primero. Clientes disponibles
3. Dirigida por el servicio
El servicio define el contrato
La especificación del API en formato OpenAPI se genera por una
librería que hace reflexión sobre el servicio.
Requiere cuidado para no romper la compatibilidad del API.
Ejemplo: https://openapi3.herokuapp.com
Fuente: https://github.com/pjmolina/event-backend
API Cliente
API ManagementTools
API ManagementTools
Aportar una capa que se coloca
por delante del API
Gestionada por 3ºs
Aporta:
 Autenticación, Autorización
 Seguridad basada en roles
 Protección frente a ataques DOS
 Monetización: cobro por
 Escalado
 Auditoría
 Métricas de uso, analíticas
Ejemplos
 3scale
 Apigee
 Mashape Kong
 CA 7Layers
 Azure API Management
 IBM Bluemix API Management
 WSO
Versionado de APIs
GET /v1/restaurants?location=SVQ
GET /v2/restaurants?location=SVQ&limit=30
 Versionado en la URL
 Versionado en Parámetros
 Versionado en cabecera
GET /restaurants?location=SVQ&limit=30&v=2
GET /restaurants?location=SVQ&limit=30
Version: 2
Escalabilidad en APIs
 API sin estado
 Con un balanceador de carga
en el frontal (como p.e. nginx o
ha-proxy)
 Que distribuye el trafico a N
(con N>=2) servidores
 DNS, SSL y certificados se
configuran solo en el
balanceador
api
lb api
api
#0
#1
#2
443
80
Conclusiones
OpenAPI es un estándar de facto
para gestión de APIs
Simplifica el consumo y la
integración de APIs
Futuro:
Versión 3.0 en Junio/Julio de 2017
Convergencia con el estándar gRPC
de Google en curso
¡Gracias!
@pmolinam
Anexos
REST
 REpresentational State Transfer
 Protocolo sin estado
 URIs únicas para cada recurso
 Semántica asociada a operaciones
 GET/PUT/POST/DELETE sobre HTTP
 Hipermedia (navegable)
GET /actors/42
Accept: application/json
200 OK
Content-Type: application/json
{ "id": 42
"name": "Jessica"
"lastname": "Alba"
"filmography": "/films/42"
}
Tipos MIME
 Declaran el tipo de codificación a emplear
 Los más frecuentes:
 JSON application/json
 XML text/xml
 HTML text/html
 Texto plano text/plain
 CSV text/csv
GET /actors/42
Accept: text/xml
200 OK
Content-Type: text/xml
<actor id="42">
<name>Jessica</name>
<lastname>Alba</lastname>
<filmography
url= "/films/42" />
</actor>
Niveles REST
Richarson Maturity Model
http://martinfowler.com/articles/richardsonMaturityModel.html
 Nivel 0. HTTP y nada mas (RPC bajo HTTP)
 Nivel 1. Recursos: GET /factura/217
 Nivel 2. Verbos y códigos de error HTTP POST /factura/  201 Created
https://i.stack.imgur.com/whhD1.png
https://httpstatuses.com
 Nivel 3. Controles Hipermedia <link rel=“lineas”
uri=“/factura/217/lineas”
/>
HAL
• Estándar en Hipermedia
para Recursos
{
“id”: 1234
“name”: “Alice in Wonderland”
“_links”: {
“self”: { “href”: “/book/10”},
“prev”: { “href”: “/book/9”},
“next”: { “href”: “/book/11”},
“action-delete”: {
“verb”: “DELETE”,
“href”: “/book/10”
}
}
}
1 de 32

Recomendados

Build and release in code with azure devops pipelines por
Build and release in code with azure devops pipelinesBuild and release in code with azure devops pipelines
Build and release in code with azure devops pipelinesGian Maria Ricci
133 vistas26 diapositivas
DevOps 101 por
DevOps 101DevOps 101
DevOps 101Ernest Mueller
32.4K vistas31 diapositivas
Modelos de Processo de Software Parte 5 por
Modelos de Processo de Software Parte 5Modelos de Processo de Software Parte 5
Modelos de Processo de Software Parte 5Elaine Cecília Gatto
918 vistas37 diapositivas
DevOps, por onde começar por
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começarAdriano Tavares
971 vistas38 diapositivas
Modern CI/CD Pipeline Using Azure DevOps por
Modern CI/CD Pipeline Using Azure DevOpsModern CI/CD Pipeline Using Azure DevOps
Modern CI/CD Pipeline Using Azure DevOpsGlobalLogic Ukraine
4.5K vistas21 diapositivas
Introduction of cloud native CI/CD on kubernetes por
Introduction of cloud native CI/CD on kubernetesIntroduction of cloud native CI/CD on kubernetes
Introduction of cloud native CI/CD on kubernetesKyohei Mizumoto
486 vistas17 diapositivas

Más contenido relacionado

La actualidad más candente

Git & GitLab por
Git & GitLabGit & GitLab
Git & GitLabGaurav Wable
862 vistas34 diapositivas
Teste de Software por
Teste de SoftwareTeste de Software
Teste de SoftwareSérgio Souza Costa
5.3K vistas107 diapositivas
Continuous integration using Jenkins and Sonar por
Continuous integration using Jenkins and SonarContinuous integration using Jenkins and Sonar
Continuous integration using Jenkins and SonarPascal Larocque
14.5K vistas43 diapositivas
Devops Adoption Roadmap v.2.6 por
Devops Adoption Roadmap v.2.6Devops Adoption Roadmap v.2.6
Devops Adoption Roadmap v.2.6Javier Dominguez
1K vistas60 diapositivas
DevOps por
DevOpsDevOps
DevOpsGehad Elsayed
1.4K vistas42 diapositivas
TSP por
TSPTSP
TSPBeto Lopez U
1.7K vistas17 diapositivas

La actualidad más candente(20)

Continuous integration using Jenkins and Sonar por Pascal Larocque
Continuous integration using Jenkins and SonarContinuous integration using Jenkins and Sonar
Continuous integration using Jenkins and Sonar
Pascal Larocque14.5K vistas
Roles and Responsibilities of a DevOps Engineer por ZaranTech LLC
Roles and Responsibilities of a DevOps EngineerRoles and Responsibilities of a DevOps Engineer
Roles and Responsibilities of a DevOps Engineer
ZaranTech LLC809 vistas
DevOps Lifecycle | Edureka por Edureka!
DevOps Lifecycle | EdurekaDevOps Lifecycle | Edureka
DevOps Lifecycle | Edureka
Edureka!617 vistas
Orquestando microservicios como lo hace Netflix por Paradigma Digital
Orquestando microservicios como lo hace NetflixOrquestando microservicios como lo hace Netflix
Orquestando microservicios como lo hace Netflix
Paradigma Digital2.6K vistas
Introduction to Gitlab por Julien Pivotto
Introduction to GitlabIntroduction to Gitlab
Introduction to Gitlab
Julien Pivotto20.7K vistas
Monitoramento de Aplicações - Felipe Regalgo por iMasters
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
iMasters709 vistas
Kubernetes GitOps featuring GitHub, Kustomize and ArgoCD por Sunnyvale
Kubernetes GitOps featuring GitHub, Kustomize and ArgoCDKubernetes GitOps featuring GitHub, Kustomize and ArgoCD
Kubernetes GitOps featuring GitHub, Kustomize and ArgoCD
Sunnyvale461 vistas
Jogo da forca - Diagrama de Classe por Daniela Carvalho
Jogo da forca - Diagrama de ClasseJogo da forca - Diagrama de Classe
Jogo da forca - Diagrama de Classe
Daniela Carvalho6.1K vistas
Road to DevOps ROI por Cloudmunch
Road to DevOps ROIRoad to DevOps ROI
Road to DevOps ROI
Cloudmunch 9.7K vistas

Similar a Diseño de APIs con OpenAPI

OpenAPI 3.0.2 por
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2Pedro J. Molina
1.3K vistas34 diapositivas
Servicios web por
Servicios webServicios web
Servicios webCheli Hedz
484 vistas7 diapositivas
App engine por
App engineApp engine
App engineThirdWay
3.4K vistas75 diapositivas
Desarrollando un API con REST por
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con RESTAlex Puig
15.9K vistas37 diapositivas
Comparación de API y SOA por
Comparación de API y SOAComparación de API y SOA
Comparación de API y SOADiego Suarez
3.2K vistas26 diapositivas
Presentación de Lyracons en el Meet Magento Argentina 2017 por
Presentación de Lyracons en el Meet Magento Argentina 2017 Presentación de Lyracons en el Meet Magento Argentina 2017
Presentación de Lyracons en el Meet Magento Argentina 2017 Diego Amuy
108 vistas45 diapositivas

Similar a Diseño de APIs con OpenAPI(20)

Servicios web por Cheli Hedz
Servicios webServicios web
Servicios web
Cheli Hedz484 vistas
App engine por ThirdWay
App engineApp engine
App engine
ThirdWay3.4K vistas
Desarrollando un API con REST por Alex Puig
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
Alex Puig15.9K vistas
Comparación de API y SOA por Diego Suarez
Comparación de API y SOAComparación de API y SOA
Comparación de API y SOA
Diego Suarez3.2K vistas
Presentación de Lyracons en el Meet Magento Argentina 2017 por Diego Amuy
Presentación de Lyracons en el Meet Magento Argentina 2017 Presentación de Lyracons en el Meet Magento Argentina 2017
Presentación de Lyracons en el Meet Magento Argentina 2017
Diego Amuy108 vistas
Apis Agregadas computomasivo por Andrea Guevara
Apis Agregadas computomasivoApis Agregadas computomasivo
Apis Agregadas computomasivo
Andrea Guevara123 vistas
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne... por equipo24
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
equipo241.8K vistas
Doppler Tutorial: Cómo aprovechar la API de Doppler por FromDoppler
Doppler Tutorial: Cómo aprovechar la API de DopplerDoppler Tutorial: Cómo aprovechar la API de Doppler
Doppler Tutorial: Cómo aprovechar la API de Doppler
FromDoppler285 vistas
Potenciando tu web con APIs de Miquel Camps para ADWE Madrid por ADWE Team
Potenciando tu web con APIs de Miquel Camps para ADWE MadridPotenciando tu web con APIs de Miquel Camps para ADWE Madrid
Potenciando tu web con APIs de Miquel Camps para ADWE Madrid
ADWE Team1.1K vistas
Potencia tu web con APIs en ADWE madrid por betabeers
Potencia tu web con APIs en ADWE madridPotencia tu web con APIs en ADWE madrid
Potencia tu web con APIs en ADWE madrid
betabeers329 vistas
WORKSHOP I: Introducción a API REST por BEEVA_es
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API REST
BEEVA_es3.1K vistas
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web) por lenny
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
lenny889 vistas
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web) por INSIGNIA4U
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
INSIGNIA4U1.6K vistas

Más de Pedro J. Molina

MDE en la industria por
MDE en la industriaMDE en la industria
MDE en la industriaPedro J. Molina
10 vistas55 diapositivas
Terraform por
TerraformTerraform
TerraformPedro J. Molina
5 vistas1 diapositiva
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web por
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebPedro J. Molina
85 vistas20 diapositivas
Infrastructure as Code with Terraform por
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with TerraformPedro J. Molina
51 vistas34 diapositivas
Are Startups for me? por
Are Startups for me?Are Startups for me?
Are Startups for me?Pedro J. Molina
465 vistas18 diapositivas
Meow Demo por
Meow DemoMeow Demo
Meow DemoPedro J. Molina
228 vistas5 diapositivas

Más de Pedro J. Molina(20)

dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web por Pedro J. Molina
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
Pedro J. Molina85 vistas
Infrastructure as Code with Terraform por Pedro J. Molina
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
Pedro J. Molina51 vistas
Essential as the base for Web DSLs por Pedro J. Molina
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLs
Pedro J. Molina300 vistas
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina por Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. MolinaACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
Pedro J. Molina646 vistas
Securizando por construcción mediante MDE por Pedro J. Molina
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
Pedro J. Molina237 vistas
Building APIs with the OpenApi Spec por Pedro J. Molina
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
Pedro J. Molina1K vistas
SVQDC 2017 Tecnologías para Microservicios por Pedro J. Molina
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para Microservicios
Pedro J. Molina1.1K vistas
Tecnologías para microservicios por Pedro J. Molina
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
Pedro J. Molina3.6K vistas
Opensouthcode: Microservicios sobre MEAN Stack por Pedro J. Molina
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
Pedro J. Molina1.2K vistas
Microservicios sobre MEAN Stack por Pedro J. Molina
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
Pedro J. Molina1.7K vistas
Hivepod: Casos de uso en OpenData por Pedro J. Molina
Hivepod: Casos de uso en OpenDataHivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenData
Pedro J. Molina797 vistas

Último

Dominios de internet.pdf por
Dominios de internet.pdfDominios de internet.pdf
Dominios de internet.pdfNahomiBanchen
10 vistas2 diapositivas
SOrtiz_Origenes y evolución de internet.ppsx por
SOrtiz_Origenes y evolución de internet.ppsxSOrtiz_Origenes y evolución de internet.ppsx
SOrtiz_Origenes y evolución de internet.ppsxARIADNAYJIMENACRUZOR
6 vistas9 diapositivas
Fundamentos de electricidad y electrónica.docx por
Fundamentos de electricidad y electrónica.docxFundamentos de electricidad y electrónica.docx
Fundamentos de electricidad y electrónica.docxDilanTabares
5 vistas9 diapositivas
Meetup_Secrets_of_DW_2_Esp.pptx por
Meetup_Secrets_of_DW_2_Esp.pptxMeetup_Secrets_of_DW_2_Esp.pptx
Meetup_Secrets_of_DW_2_Esp.pptxFedericoCastellari
11 vistas15 diapositivas
ACTIVIDAD 3 TECNOLOGIAA (1).pdf por
ACTIVIDAD 3 TECNOLOGIAA (1).pdfACTIVIDAD 3 TECNOLOGIAA (1).pdf
ACTIVIDAD 3 TECNOLOGIAA (1).pdfIsabelQuintero36
8 vistas7 diapositivas
Tecnologías para la enseñanza virtual.pptx por
Tecnologías para la enseñanza virtual.pptxTecnologías para la enseñanza virtual.pptx
Tecnologías para la enseñanza virtual.pptxexprosaavedra
11 vistas7 diapositivas

Último(20)

Fundamentos de electricidad y electrónica.docx por DilanTabares
Fundamentos de electricidad y electrónica.docxFundamentos de electricidad y electrónica.docx
Fundamentos de electricidad y electrónica.docx
DilanTabares5 vistas
Tecnologías para la enseñanza virtual.pptx por exprosaavedra
Tecnologías para la enseñanza virtual.pptxTecnologías para la enseñanza virtual.pptx
Tecnologías para la enseñanza virtual.pptx
exprosaavedra11 vistas
El Ciberespacio y sus Características.pptx por AnthlingPereira
El Ciberespacio y  sus Características.pptxEl Ciberespacio y  sus Características.pptx
El Ciberespacio y sus Características.pptx
AnthlingPereira14 vistas
TALLER DE ANÁLISIS DE ARTEFACTOS_.docx por DilanTabares
TALLER DE ANÁLISIS DE ARTEFACTOS_.docxTALLER DE ANÁLISIS DE ARTEFACTOS_.docx
TALLER DE ANÁLISIS DE ARTEFACTOS_.docx
DilanTabares5 vistas
Fundamentos de Electricidad y Electronica 9-3 (1).docx por Samuel709479
Fundamentos de Electricidad y Electronica 9-3 (1).docxFundamentos de Electricidad y Electronica 9-3 (1).docx
Fundamentos de Electricidad y Electronica 9-3 (1).docx
Samuel7094797 vistas
Fundamentos De Electricidad y Electrónica equipo 5.pdf por coloradxmaria
Fundamentos De Electricidad y Electrónica equipo 5.pdfFundamentos De Electricidad y Electrónica equipo 5.pdf
Fundamentos De Electricidad y Electrónica equipo 5.pdf
coloradxmaria14 vistas
Tecnologías para la enseñanza virtual_cdc.pptx por CarmenerdelHuasco
Tecnologías para la enseñanza virtual_cdc.pptxTecnologías para la enseñanza virtual_cdc.pptx
Tecnologías para la enseñanza virtual_cdc.pptx
Probando aplicaciones basadas en LLMs.pdf por Federico Toledo
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdf
Federico Toledo49 vistas
Fundamentos de Electricidad y Electronica 9-3 (1).docx por Samuel709479
Fundamentos de Electricidad y Electronica 9-3 (1).docxFundamentos de Electricidad y Electronica 9-3 (1).docx
Fundamentos de Electricidad y Electronica 9-3 (1).docx
Samuel7094795 vistas
fundamentos de electricidad electronica por Kevin619029
fundamentos de electricidad electronicafundamentos de electricidad electronica
fundamentos de electricidad electronica
Kevin6190295 vistas
Presentación: El impacto y peligro de la piratería de software por EmanuelMuoz11
Presentación: El impacto y peligro de la piratería de softwarePresentación: El impacto y peligro de la piratería de software
Presentación: El impacto y peligro de la piratería de software
EmanuelMuoz1117 vistas

Diseño de APIs con OpenAPI

  • 1. Diseño de API con OpenAPI Pedro J. Molina https://pjmolina.com @pmolinamhttps://metadev.pro
  • 2. ¿Qué tienen en común estos modelos de negocios? Librería 1 Librería 2 Tienda N Servicio 1 Servicio 2 Servicio N mLab SendGrid Plugin N API API API Ecosistema
  • 4. Agenda  API Economy  OpenAPI  Casos de uso  Versionado  Futuro
  • 5. API Servicio públicos para que 3ºs puedan consumirlos Descripción técnica (orientado a devs) Promueve la integración de sistemas mediante contratos claros y perdurables en el tiempo Application Programmer Interface
  • 6. API Economy Las APIs definen plataformas. Twitter, Twilio, Google Maps son ejemplos de APIs abiertas que permiter a 3ºs integrarse con sus sistemas. No puedes ganar sin ecosistema. No puedes tener ecosistema sin API. El primero que gana la cuota de mercado  gana el juego.
  • 7. API API como contrato con clientes
  • 8. APIs agnósticas de lenguaje 1. CORBA >> C + IDL 2. SOA >> XML + SOAP + WDSL … 3. REST >> JSON + HTTP
  • 9. OpenAPI Initiative Estándar de facto (Swagger) Linux Foundation https://www.openapis.org Descripción formal del contrato de un API REST consumible por maquinas y humanos. JSON o YAML
  • 11. OpenAPI Initiative Herramientas Editor http://editor.swagger.io Explorador de APIs http://petstore.swagger.io Validador https://online.swagger.io/validator Generadores opensource para skeletons para backends proxies para clientes o front-end http://swagger.io/swagger-codegen
  • 12. Casos de uso 1.API Legada 2.Contrato primero 3.Dirigida por el servicio
  • 13. 1. API Legada Documentar un API existente Construcción del contrato http://editor.swagger.io Validación Resultados: API documentada Generación de SDKs para cliente API
  • 14. 1. API Legada. Ejemplo ¿Es Nieves un nombre de hombre o de mujer? Servicio web para descubrirlo http://www.jerolba.com/mujeres-y-hombres-y-serverless GET https://us-central1-hombre-o-mujer.cloudfunctions.net/gender?name=nieves Créditos: Jerónimo López @jerolba API
  • 15. swagger: '2.0' info: version: "1.0.0" title: Hombre o mujer. host: us-central1-hombre-o-mujer.cloudfunctions.net schemes: - https consumes: - application/json produces: - application/json tags: - name: Gender description: API para no meter la pata con el género. 1. API Legada. Contrato API http://bit.ly/genero-openapi
  • 16. paths: /gender: get: description: | Devuelve la probabilidad de que el nombre indicado como parámetro sea de mujer u hombre. parameters: - name: name in: query description: Nombre de la persona required: true type: string responses: # Response code 200: description: Respuesta con exito schema: $ref: "#/definitions/GenderResponse" 404: description: No encontrado schema: $ref: "#/definitions/GenderNotFoundResponse" 1. API Legada. Contrato API
  • 17. totalMale: type: number format: int32 totalFemale: type: number format: int32 GenderNotFoundResponse: required: - name - gender properties: name: type: string gender: type: string definitions: GenderResponse: required: - name - gender - probability - totalMale - totalFemale properties: name: type: string gender: type: string probability: type: number format: float 1. API Legada. Contrato API
  • 18. 2. Contrato Primero La especificación se escribe en primer lugar http://editor.swagger.io Puede generarse:  un skeleton para el backend  Un proxy o SDK para el cliente Permite paralelizar el trabajo en backend y frontend. Los cambios al contrato pueden versionarse adecuadamente. API Cliente
  • 19. 2. Contrato Primero. Servidores disponibles
  • 20. 2. Contrato Primero. Clientes disponibles
  • 21. 3. Dirigida por el servicio El servicio define el contrato La especificación del API en formato OpenAPI se genera por una librería que hace reflexión sobre el servicio. Requiere cuidado para no romper la compatibilidad del API. Ejemplo: https://openapi3.herokuapp.com Fuente: https://github.com/pjmolina/event-backend API Cliente
  • 23. API ManagementTools Aportar una capa que se coloca por delante del API Gestionada por 3ºs Aporta:  Autenticación, Autorización  Seguridad basada en roles  Protección frente a ataques DOS  Monetización: cobro por  Escalado  Auditoría  Métricas de uso, analíticas Ejemplos  3scale  Apigee  Mashape Kong  CA 7Layers  Azure API Management  IBM Bluemix API Management  WSO
  • 24. Versionado de APIs GET /v1/restaurants?location=SVQ GET /v2/restaurants?location=SVQ&limit=30  Versionado en la URL  Versionado en Parámetros  Versionado en cabecera GET /restaurants?location=SVQ&limit=30&v=2 GET /restaurants?location=SVQ&limit=30 Version: 2
  • 25. Escalabilidad en APIs  API sin estado  Con un balanceador de carga en el frontal (como p.e. nginx o ha-proxy)  Que distribuye el trafico a N (con N>=2) servidores  DNS, SSL y certificados se configuran solo en el balanceador api lb api api #0 #1 #2 443 80
  • 26. Conclusiones OpenAPI es un estándar de facto para gestión de APIs Simplifica el consumo y la integración de APIs Futuro: Versión 3.0 en Junio/Julio de 2017 Convergencia con el estándar gRPC de Google en curso
  • 29. REST  REpresentational State Transfer  Protocolo sin estado  URIs únicas para cada recurso  Semántica asociada a operaciones  GET/PUT/POST/DELETE sobre HTTP  Hipermedia (navegable) GET /actors/42 Accept: application/json 200 OK Content-Type: application/json { "id": 42 "name": "Jessica" "lastname": "Alba" "filmography": "/films/42" }
  • 30. Tipos MIME  Declaran el tipo de codificación a emplear  Los más frecuentes:  JSON application/json  XML text/xml  HTML text/html  Texto plano text/plain  CSV text/csv GET /actors/42 Accept: text/xml 200 OK Content-Type: text/xml <actor id="42"> <name>Jessica</name> <lastname>Alba</lastname> <filmography url= "/films/42" /> </actor>
  • 31. Niveles REST Richarson Maturity Model http://martinfowler.com/articles/richardsonMaturityModel.html  Nivel 0. HTTP y nada mas (RPC bajo HTTP)  Nivel 1. Recursos: GET /factura/217  Nivel 2. Verbos y códigos de error HTTP POST /factura/  201 Created https://i.stack.imgur.com/whhD1.png https://httpstatuses.com  Nivel 3. Controles Hipermedia <link rel=“lineas” uri=“/factura/217/lineas” />
  • 32. HAL • Estándar en Hipermedia para Recursos { “id”: 1234 “name”: “Alice in Wonderland” “_links”: { “self”: { “href”: “/book/10”}, “prev”: { “href”: “/book/9”}, “next”: { “href”: “/book/11”}, “action-delete”: { “verb”: “DELETE”, “href”: “/book/10” } } }