SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Diseño de API
con OpenAPI 3.0.2
Pedro J. Molina
@pmolinam
https://metadev.pro
OpenAPI Initiative https://www.openapis.org
https://www.linuxfoundation.org
Miembros
Grupo de Investigación ISA
Promoviendo un estándar para SLAs en APIs:
https://github.com/isa-group/SLA4OAI-Specification
Grupo de Investigación ISA
API
 Servicio para que otros los
consuman
 Descripción técnica (orientado a
devs)
 Promueve la interoperación de
sistemas mediante contratos claros
y perdurables en el tiempo
Application Programmer Interface
API
API como contrato para servicios y clientes
APIs agnósticas de lenguaje
1. CORBA >> C + IDL
2. SOA >> XML + SOAP + WDSL …
3. REST >> JSON + HTTP
Breve Historia
 2011.09 Swagger 1.0
 2015.03 SmartBear compra Swagger
 2016.01 SmartBear dona Swagger a Linux Fund.
 2016.01 OpenAPI 2.0 / Linux Foundation
 2017.07 OpenAPI 3.0
 2018.10 OpenAPI 3.0.2
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
openapi: ‘3.0.2'
info:
version: "1.0.1"
title: Hombre o mujer.
tags:
- name: Gender
description: API para género for frecuencia estadística.
1. API Legada. Contrato API
http://bit.ly/gender-openapi3
paths:
/gender:
get:
description: |
Devuelve la probabilidad de que el nombre sea de mujer u hombre.
parameters:
- name: name
in: query
description: Nombre de la persona
required: true
schema:
type: string
responses:
# Response code
‘200’:
description: Respuesta con exito
content:
application/json:
schema:
$ref: ‘#/definitions/GenderResponse’
1. API Legada. Contrato API
'404':
description: Not found
content:
application/json:
schema:
$ref:
'#/components/schemas/GenderNotFoundResponse'
totalMale:
type: number
format: int32
totalFemale:
type: number
format: int32
GenderNotFoundResponse:
required:
- name
- gender
properties:
name:
type: string
gender:
type: string
components:
schemas:
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
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
Librerías para usar OpenAPI hoy
 Prototipado
 oas-tools / oas-generator (OpenAPI 3.0) https://www.npmjs.com/package/oas-
generator
 swagger-tools (OpenAPI 2.0) https://www.npmjs.com/package/swagger-tools
 Directorios de Herramientas
 https://github.com/OAI/OpenAPI-Specification/blob/master/IMPLEMENTATIONS.md
 https://openapi.tools/
 https://github.com/metadevpro/openapi3-ts
 Conversión de contratos 2.0 a 3.0
 Mermade https://mermade.org.uk/openapi-converter
Estandarización de APIs
 Gobierno de Holanda
 Estandarizo OpenAPI 3.0 a nivel nacional (2018.05) https://www.linkedin.com/pulse/why-
dutch-government-standardised-openapi-3x-dimitri-van-hees/
 Gobierno de Canadá, British Columbia
https://catalogue.data.gov.bc.ca/group/bc-government-api-registry
 En estudio por la Comisión Europea. Considerando estandarizarlo en toda la
UE.
 eBay publica todas su APIs en formato OpenAPI 3.0
 Stripe https://github.com/stripe/openapi
 AWS
OpenAPI, la Banca y Fintech
 Directiva Europea PSD2
 Directiva para Pagos Digitales
 Mercado Único de Pagos en la UE
 Servicios de iniciación de Pagos (PIS)
 Servicios de información de cuenta (AIS)
https://www.bbva.com/es/lo-saber-la-psd2/
https://www.swift.com/news-events/press-
releases/swift-creates-financial-sector-api-
blueprint
OpenAPI Roadmap
 JSON Schema
 Overlays
 Firmado y encriptado de peticiones: JOSE
 Más métodos de Autenticación (Certs, OAuth2 scopes)
 Multisegment Paths
 Message based API
 Roadmap para 3.1:
https://github.com/OAI/OpenAPI-Specification/issues/1466
CAL Profile
 CAL Profile https://github.com/metadevpro/cal
 Se aceptan contribuciones (Issues, Pull Requests, etc.)
 Recomendaciones para APIs REST sobre OpenAPI
 Implementaciones de Referencia
 NodeJS + TypeScript https://github.com/metadevpro/alba-node
 dotNet Core https://github.com/metadevpro/alba-netcore
Conclusiones
OpenAPI:
 definir
 consumir
 publicar
 documentar
 y gestionar APIs interoperables
¡Gracias!
@pmolinam
OpenAPI 3.0.2

Contenu connexe

Tendances

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
 
Swagger / Quick Start Guide
Swagger / Quick Start GuideSwagger / Quick Start Guide
Swagger / Quick Start GuideAndrii Gakhov
 
OpenAPI at Scale
OpenAPI at ScaleOpenAPI at Scale
OpenAPI at ScaleNordic APIs
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014JWORKS powered by Ordina
 
Connecting Connect with Spring Boot
Connecting Connect with Spring BootConnecting Connect with Spring Boot
Connecting Connect with Spring BootVincent Kok
 
Express JS Rest API Tutorial
Express JS Rest API TutorialExpress JS Rest API Tutorial
Express JS Rest API TutorialSimplilearn
 
Writing REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger AdaWriting REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger AdaStephane Carrez
 
Using RAML 1.0 Like a Pro
Using RAML 1.0 Like a ProUsing RAML 1.0 Like a Pro
Using RAML 1.0 Like a ProMuleSoft
 
WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview Edgar Silva
 
Postman Introduction
Postman IntroductionPostman Introduction
Postman IntroductionRahul Agarwal
 
Schema-First API Design
Schema-First API DesignSchema-First API Design
Schema-First API DesignYos Riady
 
Overview of API Management Architectures
Overview of API Management ArchitecturesOverview of API Management Architectures
Overview of API Management ArchitecturesNordic APIs
 
How to migrate an application in IBM APIc, and preserve its client credential
How to migrate an application in IBM APIc, and preserve its client credentialHow to migrate an application in IBM APIc, and preserve its client credential
How to migrate an application in IBM APIc, and preserve its client credentialShiu-Fun Poon
 
Effective API Lifecycle Management
Effective API Lifecycle Management Effective API Lifecycle Management
Effective API Lifecycle Management SmartBear
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing SwaggerTony Tam
 
REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & DevelopmentAshok Pundit
 

Tendances (20)

API Docs with OpenAPI 3.0
API Docs with OpenAPI 3.0API Docs with OpenAPI 3.0
API Docs with OpenAPI 3.0
 
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...
 
Swagger / Quick Start Guide
Swagger / Quick Start GuideSwagger / Quick Start Guide
Swagger / Quick Start Guide
 
OpenAPI at Scale
OpenAPI at ScaleOpenAPI at Scale
OpenAPI at Scale
 
Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014Documenting your REST API with Swagger - JOIN 2014
Documenting your REST API with Swagger - JOIN 2014
 
Connecting Connect with Spring Boot
Connecting Connect with Spring BootConnecting Connect with Spring Boot
Connecting Connect with Spring Boot
 
Belajar Postman test runner
Belajar Postman test runnerBelajar Postman test runner
Belajar Postman test runner
 
Express JS Rest API Tutorial
Express JS Rest API TutorialExpress JS Rest API Tutorial
Express JS Rest API Tutorial
 
Writing REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger AdaWriting REST APIs with OpenAPI and Swagger Ada
Writing REST APIs with OpenAPI and Swagger Ada
 
Using RAML 1.0 Like a Pro
Using RAML 1.0 Like a ProUsing RAML 1.0 Like a Pro
Using RAML 1.0 Like a Pro
 
WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview WSO2 API Manager 2.0 - Overview
WSO2 API Manager 2.0 - Overview
 
Postman Introduction
Postman IntroductionPostman Introduction
Postman Introduction
 
Schema-First API Design
Schema-First API DesignSchema-First API Design
Schema-First API Design
 
Overview of API Management Architectures
Overview of API Management ArchitecturesOverview of API Management Architectures
Overview of API Management Architectures
 
How to migrate an application in IBM APIc, and preserve its client credential
How to migrate an application in IBM APIc, and preserve its client credentialHow to migrate an application in IBM APIc, and preserve its client credential
How to migrate an application in IBM APIc, and preserve its client credential
 
API Governance in the Enterprise
API Governance in the EnterpriseAPI Governance in the Enterprise
API Governance in the Enterprise
 
Ansible - Hands on Training
Ansible - Hands on TrainingAnsible - Hands on Training
Ansible - Hands on Training
 
Effective API Lifecycle Management
Effective API Lifecycle Management Effective API Lifecycle Management
Effective API Lifecycle Management
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
 
REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & Development
 

Similaire à OpenAPI 3.0.2

Diseño de APIs con OpenAPI
Diseño de APIs con OpenAPIDiseño de APIs con OpenAPI
Diseño de APIs con OpenAPIPedro J. Molina
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con RESTAlex Puig
 
Mada metodología ágil de desarrollo de apis
Mada   metodología ágil de desarrollo de apisMada   metodología ágil de desarrollo de apis
Mada metodología ágil de desarrollo de apisCloudAppi
 
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
 
App engine
App engineApp engine
App engineThirdWay
 
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Iniciativa Barcelona Open Data
 
Google Cloud Platform y Python
Google Cloud Platform y PythonGoogle Cloud Platform y Python
Google Cloud Platform y PythonCarlos Toxtli
 
Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Joaquín Salvachúa
 
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
 
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
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAbimael Desales López
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHAlejandro Esquiva Rodriguez
 
JSDays Desarrolla tu primera API
JSDays Desarrolla tu primera APIJSDays Desarrolla tu primera API
JSDays Desarrolla tu primera APICloudAppi
 
Consumo de web service con volley (api rest)
Consumo de web service con volley (api rest)Consumo de web service con volley (api rest)
Consumo de web service con volley (api rest)Diego Vasco
 

Similaire à OpenAPI 3.0.2 (20)

Diseño de APIs con OpenAPI
Diseño de APIs con OpenAPIDiseño de APIs con OpenAPI
Diseño de APIs con OpenAPI
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Mada metodología ágil de desarrollo de apis
Mada   metodología ágil de desarrollo de apisMada   metodología ágil de desarrollo de apis
Mada metodología ágil de desarrollo de apis
 
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
 
Servicios web
Servicios webServicios web
Servicios web
 
Servicios web Extendido_error perl
Servicios web Extendido_error perlServicios web Extendido_error perl
Servicios web Extendido_error perl
 
RAML
RAMLRAML
RAML
 
App engine
App engineApp engine
App engine
 
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)Curs 2.8. Utilización Automatizada de Datos Publicos (1)
Curs 2.8. Utilización Automatizada de Datos Publicos (1)
 
Google Cloud Platform y Python
Google Cloud Platform y PythonGoogle Cloud Platform y Python
Google Cloud Platform y Python
 
Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios
 
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)
 
SimpleSAMLphp
SimpleSAMLphpSimpleSAMLphp
SimpleSAMLphp
 
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...
 
Aprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDBAprendiendo AWS Lambda con API Gateway y DynamoDB
Aprendiendo AWS Lambda con API Gateway y DynamoDB
 
Taller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSHTaller Android Party: Automatic API REST + Notificaciones PUSH
Taller Android Party: Automatic API REST + Notificaciones PUSH
 
JSDays Desarrolla tu primera API
JSDays Desarrolla tu primera APIJSDays Desarrolla tu primera API
JSDays Desarrolla tu primera API
 
Consumo de web service con volley (api rest)
Consumo de web service con volley (api rest)Consumo de web service con volley (api rest)
Consumo de web service con volley (api rest)
 

Plus de 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
 

Plus de 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
 

OpenAPI 3.0.2

  • 1. Diseño de API con OpenAPI 3.0.2
  • 6. Grupo de Investigación ISA Promoviendo un estándar para SLAs en APIs: https://github.com/isa-group/SLA4OAI-Specification
  • 8. API  Servicio para que otros los consuman  Descripción técnica (orientado a devs)  Promueve la interoperación de sistemas mediante contratos claros y perdurables en el tiempo Application Programmer Interface
  • 9. API API como contrato para servicios y clientes
  • 10. APIs agnósticas de lenguaje 1. CORBA >> C + IDL 2. SOA >> XML + SOAP + WDSL … 3. REST >> JSON + HTTP
  • 11. Breve Historia  2011.09 Swagger 1.0  2015.03 SmartBear compra Swagger  2016.01 SmartBear dona Swagger a Linux Fund.  2016.01 OpenAPI 2.0 / Linux Foundation  2017.07 OpenAPI 3.0  2018.10 OpenAPI 3.0.2
  • 12.
  • 13. 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
  • 14. Casos de uso 1. API Legada 2. Contrato primero 3. Dirigida por el servicio
  • 15. 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
  • 16. 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
  • 17. openapi: ‘3.0.2' info: version: "1.0.1" title: Hombre o mujer. tags: - name: Gender description: API para género for frecuencia estadística. 1. API Legada. Contrato API http://bit.ly/gender-openapi3
  • 18. paths: /gender: get: description: | Devuelve la probabilidad de que el nombre sea de mujer u hombre. parameters: - name: name in: query description: Nombre de la persona required: true schema: type: string responses: # Response code ‘200’: description: Respuesta con exito content: application/json: schema: $ref: ‘#/definitions/GenderResponse’ 1. API Legada. Contrato API '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/GenderNotFoundResponse'
  • 19. totalMale: type: number format: int32 totalFemale: type: number format: int32 GenderNotFoundResponse: required: - name - gender properties: name: type: string gender: type: string components: schemas: GenderResponse: required: - name - gender - probability - totalMale - totalFemale properties: name: type: string gender: type: string probability: type: number format: float 1. API Legada. Contrato API
  • 20. 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
  • 21. 2. Contrato Primero. Servidores disponibles
  • 22. 2. Contrato Primero. Clientes disponibles
  • 23. 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
  • 25. 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
  • 26. 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
  • 27. Librerías para usar OpenAPI hoy  Prototipado  oas-tools / oas-generator (OpenAPI 3.0) https://www.npmjs.com/package/oas- generator  swagger-tools (OpenAPI 2.0) https://www.npmjs.com/package/swagger-tools  Directorios de Herramientas  https://github.com/OAI/OpenAPI-Specification/blob/master/IMPLEMENTATIONS.md  https://openapi.tools/  https://github.com/metadevpro/openapi3-ts  Conversión de contratos 2.0 a 3.0  Mermade https://mermade.org.uk/openapi-converter
  • 28. Estandarización de APIs  Gobierno de Holanda  Estandarizo OpenAPI 3.0 a nivel nacional (2018.05) https://www.linkedin.com/pulse/why- dutch-government-standardised-openapi-3x-dimitri-van-hees/  Gobierno de Canadá, British Columbia https://catalogue.data.gov.bc.ca/group/bc-government-api-registry  En estudio por la Comisión Europea. Considerando estandarizarlo en toda la UE.  eBay publica todas su APIs en formato OpenAPI 3.0  Stripe https://github.com/stripe/openapi  AWS
  • 29. OpenAPI, la Banca y Fintech  Directiva Europea PSD2  Directiva para Pagos Digitales  Mercado Único de Pagos en la UE  Servicios de iniciación de Pagos (PIS)  Servicios de información de cuenta (AIS) https://www.bbva.com/es/lo-saber-la-psd2/ https://www.swift.com/news-events/press- releases/swift-creates-financial-sector-api- blueprint
  • 30. OpenAPI Roadmap  JSON Schema  Overlays  Firmado y encriptado de peticiones: JOSE  Más métodos de Autenticación (Certs, OAuth2 scopes)  Multisegment Paths  Message based API  Roadmap para 3.1: https://github.com/OAI/OpenAPI-Specification/issues/1466
  • 31. CAL Profile  CAL Profile https://github.com/metadevpro/cal  Se aceptan contribuciones (Issues, Pull Requests, etc.)  Recomendaciones para APIs REST sobre OpenAPI  Implementaciones de Referencia  NodeJS + TypeScript https://github.com/metadevpro/alba-node  dotNet Core https://github.com/metadevpro/alba-netcore
  • 32. Conclusiones OpenAPI:  definir  consumir  publicar  documentar  y gestionar APIs interoperables