Arquitectura de APIs REST
Emiliano Cenizo
Índice- Lo básico: Qué es REST?- Rest en MELI - Viejo mundo- Rest en MELI - Nuevo mundo- Tecnologías interesantes- Problemas divertidos- Preguntas / Contacto
Lo básico
Lo básicoRepresentational State Transfer
Arquitectura para APIs
Lo básicoRepresentational State Transfer
Arquitectura para APIs
Se enfoca en los componentes y en la info que manda, pero no en los detalles específicos.
Lo básicoRepresentational State Transfer
Arquitectura para APIs
Se enfoca en los componentes y en la info que manda, pero no en los detalles específicos.
Preparado para sistemas distribuidos.
Lo básicoRepresentational State Transfer
Arquitectura para APIs
Se enfoca en los componentes y en la info que manda, pero no en los detalles específicos.
Preparado para sistemas distribuidos.
REST no necesariamente es a través de Internet (http)...
Pero hoy hablaremos de REST a través de Internet mediante los verbos
Lo básico: Qué es REST?
Qué es REST? - Json / XML
StatelessCacheableEscalable (horizontalizable)Estandares muy bien definidosIntuitivo:
GET api.mercadolibre.com/sites/MCO
Qué es REST? - Propiedades interesantes
REST en MeLi: Viejo Mundo
REST en MeLi: Viejo Mundo
REST en MeLi: Viejo Mundo
Frontends
REST en MeLi: Viejo Mundo
Frontends Backends
REST en MeLi: Viejo Mundo
Frontends Backends Items
REST en MeLi: Viejo Mundo
Frontends Backends Items Preguntas
REST en MeLi: Viejo Mundo
Frontends Backends Items Preguntas
El gordo de la
campera de cuero
REST en MeLi: Viejo Mundo
Deploys semanales
Probar una feature nueva era complejo
Poco robusto!
Altísimo acoplamiento
Una base para controlarlos a todos
Horizontalizar era difícil
Bardos
REST en MeLi: Nuevo Mundo
REST en MeLi: Nuevo Mundo
Multiples APIs Rest!
Cada api controla sus responsabilidades
REST en MeLi: Nuevo Mundo
Robusto.
Cada API usa la tecnología que necesita usar
Cosas As A Service:
VMs AASBases de datos AAS
Horizontalizar fue simple.
Foco en nuevos devices posible.
Foco en integradores posible.
Ventajas
/items/pictures/users/sites/MCO/categories/orders...
/sites/MCO/search...
/orders/bookmarks...
REST en MeLi: Usos
REST en MeLi: Usos
REST en MeLi: UsosGET https://api.mercadolibre.com/items/MLA624442482
REST en MeLi: Usos
REST en MeLi: UsosGET https://api.mercadolibre.com/questions/search?item_id=MLA624442482
REST en MeLi: UsosGET https://api.mercadolibre.com/questions/search?item_id=MLA624442482&attributes=questions.text
Tecnologías interesantes
Tecnologías interesantes: Elastic Search
Plataforma de búsquedaSe comunica con REST + JSONOpen sourceDistribuidoSoporta full text searchMultitenant
Multi combo con Logstash + Kibana
Tecnologías interesantes: Elastic Search
Plataforma de búsquedaSe comunica con REST + JSONOpen sourceDistribuidoSoporta full text searchMultitenant
Multi combo con Logstash + Kibana
Tecnologías interesantes: Elastic Search
Sistema de cacheoFree / open sourceKey / Value por RESTFunciona en memoriaTremendamente simple de usar y adaptar
Tecnologías interesantes: Memcached
RabbitMQ
Apache Solr
Tecnologías interesantes: Menciones
No Rest pero vale la pena mencionar:
MongoDB
Redis
Problemas divertidos
Problemática: Configuraciones. Donde van?
Si están en el código; requieren un deploy para cambiarlas.
Problemas divertidos: Configuraciones
Problemática: Configuraciones. Donde van?
Si están en el código; requieren un deploy para cambiarlas.
Problema puntual: Cambiar configuraciones en caliente
Archivo de configuración?Base de datos?
Problemas divertidos: Configuraciones
Problemas divertidos: Configuraciones
API REST!POST /configs GET /configs/KEYPUT /configs/KEY
Cacheble!
Problemas divertidos: Configuraciones
GET payments/admin/config/BRADEXPDAYS_NONE_163717137?access_token=<TOKEN>
Plataforma de pago de servicios de Brasil
Mecánica: hacias un POST con un ID; asincrónicamente te hacen una request para obtener todo el resto de los datos.
Problemas divertidos: Pago de servicios MLB
Problemas:
Documentación en inglés mal traducida
Problemas divertidos: Pago de servicios MLB
Problemas:
Documentación en inglés mal traducida
Es un GET, no?
Problemas divertidos: Pago de servicios MLB
Problemas:
Documentación en inglés mal traducida
Es un GET, no?
No… :’(
Problemas divertidos: Pago de servicios MLB
Lecciones aprendidas:
●Cuando te integras contra otra API, no está de más pedir ejemplos. Muchos.
Problemas divertidos: Pago de servicios MLB
Lecciones aprendidas:
●Cuando te integras contra otra API, no está de más pedir ejemplos. Muchos.
●Mientras + burocrático un proveedor; normalmente mejor adaptada la documentación.
Problemas divertidos: Pago de servicios MLB
Lecciones aprendidas:
●Cuando te integras contra otra API, no está de más pedir ejemplos. Muchos
●Mientras + burocrático un proveedor; normalmente mejor adaptada la documentación.
●Que vos respetes un estándar, no quiere decir que el resto lo haga.
Problemas divertidos: Pago de servicios MLB
Problemática: un medio de pago en Colombia que requería procesamiento complejo.
Problemas divertidos: Transferencias Bancarias
Problemática: un medio de pago en Colombia que requería procesamiento complejo.
1)Teníamos que crear una nueva transacción por API.
2)Hacia un redirect a la página del banco.
3)Luego, teníamos que periódicamente hacer llamadas al server de ellos para saber el estado del pago.
4)Resolvemos el pago (payment; el objeto de negocio de Mercado Pago).
Problemas divertidos: Transferencias Bancarias
Problemas divertidos: Transferencias Bancarias
FRONTEND PAYMENTS PROVIDER
Bueno, generemos una API periférica a payments, que lleve eso!
SEMIONLINE PAYMENTS
bankUrl
Problemas divertidos: Transferencias Bancarias
FRONTEND PAYMENTS PROVIDER
Bueno, generemos una API periférica a payments, que lleve eso!
SEMIONLINE PAYMENTS
bankUrl
Pagina del banco
Problemas divertidos: Transferencias Bancarias
SEMIONLINE PAYMENTS
PROVIDER
crearTrxtraerTrxcancelarTrx
PAYMENTS API
aprobarPagorechazarPagofondearPago
Problemas:
●Si fallaba algo al medio, el pago quedaba pendiente para siempre.
●Muy difícil de trackear.
●Sumarle un segundo medio a la api, fue un lío.
Problemas divertidos: Transferencias Bancarias
Solución:
Problemas divertidos: Transferencias Bancarias
Solución: DESACOPLAR!
Problemas divertidos: Transferencias Bancarias
Solución: DESACOPLAR!
Problemas divertidos: Transferencias Bancarias
SEMIONLINE PAYMENTS PROVIDER
crearTrxtraerTrxcancelarTrx
BigQ
POST
Sistema de colas (BigQ)Por REST, escucha cuando hay cambios en SOP; y notifica a quien se suscriba.
Solución: DESACOPLAR!
Problemas divertidos: Transferencias Bancarias
PAYMENTS API
aprobarPagorechazarPagofondearPago
SEMIONLINE CONSUMER
BigQ
POST
Recibió notificación
Creamos SEMIONLINE CONSUMER
Solución: DESACOPLAR!
Semionline_payments se ocupaba de las transacciones.Semionline_consumer de la relación entre transacciones y payments.
Problemas divertidos: Transferencias Bancarias
Solución: DESACOPLAR!
Semionline_payments se ocupaba de las transacciones.Semionline_consumer de la relación entre transacciones y payments.
SOP notifica cambios; SOC escucha los cambios.Cuando una transacción se aprueba en SOP, SOC actua contra payments.De haber inconsistencias o problemas, SOC es el que se encarga de resolverlos / avisar.
Problemas divertidos: Transferencias Bancarias
Solución: DESACOPLAR!
Problemas divertidos: Transferencias Bancarias
SEMIONLINE PAYMENTS PROVIDER
crearTrxtraerTrxcancelarTrx
PAYMENTS API
aprobarPagorechazarPagofondearPago
SEMIONLINE CONSUMER
BigQ
POST
POST
Solución: DESACOPLAR!
Problemas divertidos: Transferencias Bancarias
SEMIONLINE PAYMENTS PROVIDER
crearTrxtraerTrxcancelarTrx
PAYMENTS API
aprobarPagorechazarPagofondearPago
SEMIONLINE CONSUMER
BigQ
POST
POST
Hoy:
Problemas divertidos: Transferencias Bancarias
* La API de semionline_payments maneja 5 conexiones a proveedores; con una 6ta en camino (interna); y más de 30 bancos de Latinoamérica.* Los tiempos son estables, la API robusta; cuando se cae un proveedor aislamos el problema en esa capa.* Posteamos toda la data de las transacciones a un elastic search para la rápida visualización.
Hoy:
Problemas divertidos: Transferencias Bancarias
Lecciones aprendidas:
* La API de semionline_payments maneja 5 conexiones a proveedores; con una 6ta en camino (interna); y más de 30 bancos de Latinoamérica.* Los tiempos son estables, la API robusta; cuando se cae un proveedor aislamos el problema en esa capa.* Posteamos toda la data de las transacciones a un elastic search para la rápida visualización.
* Asíncrono = BUENO. * REST es mejor cuando las responsabilidades están bien definidas y separadas.* Desacoplar ES clave: REST se beneficia mucho de no estar; bueno, acoplado, a los tiempos y particularidades de la contraparte (que lo que te haga renegar sean tus problemas, no los de otros).
Preguntas?
Gracias!
[email protected]@EmilianoCenizoKanyenke#11899
Top Related