SlideShare a Scribd company logo
1 of 32
Download to read offline
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
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”
}
}
}

More Related Content

What's hot

Speed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red Hat
Speed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red HatSpeed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red Hat
Speed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red HatHostedbyConfluent
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API GatewayYohann Ciurlik
 
Introduction to SAML 2.0
Introduction to SAML 2.0Introduction to SAML 2.0
Introduction to SAML 2.0Mika Koivisto
 
REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & DevelopmentAshok Pundit
 
Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...
Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...
Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...HostedbyConfluent
 
Webinar: Implementation of 10 Integration Patterns on iPaaS Platform
Webinar: Implementation of 10 Integration Patterns on iPaaS PlatformWebinar: Implementation of 10 Integration Patterns on iPaaS Platform
Webinar: Implementation of 10 Integration Patterns on iPaaS PlatformAPPSeCONNECT
 
High level design document template
High level design document templateHigh level design document template
High level design document templateanosha jamshed
 
Secure your app with keycloak
Secure your app with keycloakSecure your app with keycloak
Secure your app with keycloakGuy Marom
 
Microservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaMicroservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaEdureka!
 
Angular 6 Form Validation with Material
Angular 6 Form Validation with MaterialAngular 6 Form Validation with Material
Angular 6 Form Validation with MaterialMalika Munaweera
 
AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...
AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...
AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...Amazon Web Services
 

What's hot (20)

Speed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red Hat
Speed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red HatSpeed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red Hat
Speed-Up Kafka Delivery with AsyncAPI & Microcks | Hugo Guerrero, Red Hat
 
Apigee Products Overview
Apigee Products OverviewApigee Products Overview
Apigee Products Overview
 
Kong API
Kong APIKong API
Kong API
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API Gateway
 
02 api gateway
02 api gateway02 api gateway
02 api gateway
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Introduction to SAML 2.0
Introduction to SAML 2.0Introduction to SAML 2.0
Introduction to SAML 2.0
 
REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & Development
 
Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...
Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...
Apicurio Registry: Event-driven APIs & Schema governance for Apache Kafka | F...
 
Webinar: Implementation of 10 Integration Patterns on iPaaS Platform
Webinar: Implementation of 10 Integration Patterns on iPaaS PlatformWebinar: Implementation of 10 Integration Patterns on iPaaS Platform
Webinar: Implementation of 10 Integration Patterns on iPaaS Platform
 
OAuth 2
OAuth 2OAuth 2
OAuth 2
 
High level design document template
High level design document templateHigh level design document template
High level design document template
 
Secure your app with keycloak
Secure your app with keycloakSecure your app with keycloak
Secure your app with keycloak
 
Microservices Design Patterns | Edureka
Microservices Design Patterns | EdurekaMicroservices Design Patterns | Edureka
Microservices Design Patterns | Edureka
 
IdP, SAML, OAuth
IdP, SAML, OAuthIdP, SAML, OAuth
IdP, SAML, OAuth
 
Angular 6 Form Validation with Material
Angular 6 Form Validation with MaterialAngular 6 Form Validation with Material
Angular 6 Form Validation with Material
 
Rest API
Rest APIRest API
Rest API
 
RAML
RAMLRAML
RAML
 
AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...
AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...
AWS July Webinar Series: Overview: Build and Manage your APIs with Amazon API...
 

Similar to Diseño de APIs con OpenAPI

App engine
App engineApp engine
App engineThirdWay
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con RESTAlex Puig
 
Comparación de API y SOA
Comparación de API y SOAComparación de API y SOA
Comparación de API y SOADiego Suarez
 
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
Presentación de Lyracons en el Meet Magento Argentina 2017 Diego Amuy
 
Daniel rabinovich php conference
Daniel rabinovich   php conferenceDaniel rabinovich   php conference
Daniel rabinovich php conferenceDaniel Rabinovich
 
Apis Agregadas computomasivo
Apis Agregadas computomasivoApis Agregadas computomasivo
Apis Agregadas computomasivoAndrea Guevara
 
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...
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...equipo24
 
Doppler Tutorial: Cómo aprovechar la API de Doppler
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 DopplerFromDoppler
 
Potenciando tu web con APIs de Miquel Camps para ADWE Madrid
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 MadridADWE Team
 
Potencia tu web con APIs en ADWE madrid
Potencia tu web con APIs en ADWE madridPotencia tu web con APIs en ADWE madrid
Potencia tu web con APIs en ADWE madridbetabeers
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTBEEVA_es
 
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)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)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)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 

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

OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
Servicios web
Servicios webServicios web
Servicios web
 
App engine
App engineApp engine
App engine
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Comparación de API y SOA
Comparación de API y SOAComparación de API y SOA
Comparación de API y SOA
 
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
Presentación de Lyracons en el Meet Magento Argentina 2017
 
Daniel rabinovich php conference
Daniel rabinovich   php conferenceDaniel rabinovich   php conference
Daniel rabinovich php conference
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Manual PHP 7
Manual PHP 7Manual PHP 7
Manual PHP 7
 
Programando WebApps con APIs
Programando WebApps con APIsProgramando WebApps con APIs
Programando WebApps con APIs
 
Apis Agregadas computomasivo
Apis Agregadas computomasivoApis Agregadas computomasivo
Apis Agregadas computomasivo
 
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...
Taller de Diseño y Desarrollo de Aplicaciones para Twitter - Congreso Interne...
 
Doppler Tutorial: Cómo aprovechar la API de Doppler
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
 
Potenciando tu web con APIs de Miquel Camps para ADWE Madrid
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
 
Potencia tu web con APIs en ADWE madrid
Potencia tu web con APIs en ADWE madridPotencia tu web con APIs en ADWE madrid
Potencia tu web con APIs en ADWE madrid
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API REST
 
MBaaS - Parse
MBaaS - ParseMBaaS - Parse
MBaaS - Parse
 
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)
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)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Api rest client en Android
Api rest client en AndroidApi rest client en Android
Api rest client en Android
 

More from Pedro J. Molina

dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
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
 
Infrastructure as Code with Terraform
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with TerraformPedro J. Molina
 
LangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with EssentialLangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with EssentialPedro J. Molina
 
Essential as the base for Web DSLs
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLsPedro J. Molina
 
ACM SIGCHI EICS-2019 Keynote. Quid, 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. MolinaPedro J. Molina
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web ComponentsPedro J. Molina
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web componentsPedro J. Molina
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDEPedro J. Molina
 
Building APIs with the OpenApi Spec
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi SpecPedro J. Molina
 
Micro vs Nano (servicios)
Micro vs Nano (servicios)Micro vs Nano (servicios)
Micro vs Nano (servicios)Pedro J. Molina
 
SVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosPedro J. Molina
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackPedro J. Molina
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
 

More from Pedro J. Molina (20)

MDE en la industria
MDE en la industriaMDE en la industria
MDE en la industria
 
Terraform
TerraformTerraform
Terraform
 
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
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
 
Infrastructure as Code with Terraform
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
 
LangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with EssentialLangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with Essential
 
Are Startups for me?
Are Startups for me?Are Startups for me?
Are Startups for me?
 
Meow Demo
Meow DemoMeow Demo
Meow Demo
 
Essential as the base for Web DSLs
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLs
 
ACM SIGCHI EICS-2019 Keynote. Quid, 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
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web Components
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web components
 
Quid
QuidQuid
Quid
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
 
Building APIs with the OpenApi Spec
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
 
Micro vs Nano (servicios)
Micro vs Nano (servicios)Micro vs Nano (servicios)
Micro vs Nano (servicios)
 
SVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para Microservicios
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 

Recently uploaded

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 

Recently uploaded (20)

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 

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
  • 10.
  • 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” } } }