Couchbase Móvil

Desarrolladores móviles: ¿Le quita el sueño REST?

REpresentación State Transfer, comúnmente conocido como "REST", describe un estándar para la comunicación programática con servicios de datos backend a través de la web.

Una API REST es una interfaz de programación que utiliza peticiones HTTP para POST (crear), GET (leer), PUT (actualizar) y DELETE datos (conocidas como "operaciones CRUD") a través de un punto final URL básico similar a https://sample.com/api/products. Los desarrolladores crean aplicaciones que interactúan con la API mediante solicitudes HTTP al punto final.

Piense en los puntos finales de la API REST como encapsulaciones de consultas que se exponen para que los desarrolladores interactúen con una fuente de datos. La abstracción de la complejidad hace que el uso de REST sea fácil: es sólo una URL, pero ten en cuenta que sólo las consultas que los autores de la API han pensado y expuesto están disponibles para las masas, la manipulación de datos más allá de esas consultas requiere programación.

Debido a su sencillez, y al hecho de que casi todas las soluciones de software importantes ofrecen acceso REST, aprovechar las API REST para los datos se ha convertido en un enfoque popular para el desarrollo de aplicaciones web.

¿Por qué REST en primer lugar?

Las API REST son una gran opción para muchas aplicaciones, especialmente las menos complejas con requisitos básicos de obtención y actualización de registros.

Por ejemplo, una aplicación que muestre "ubicaciones cercanas" de un minorista podría pasar las coordenadas de ubicación del usuario a un punto final REST como "https://sample.com/api/locations/?=___", que devuelve las direcciones de las tiendas en un radio determinado de esa ubicación. Toda la información que la aplicación necesita para la función "tiendas cercanas" se proporciona a través de un sencillo botón GET llamada. Por este tipo de razones, REST es bueno cuando las necesidades de datos de la aplicación pueden satisfacerse con un acceso general a las entidades.

Pero si tu aplicación requiere más lógica para el manejo de datos, como las que modifican con frecuencia entidades como usuarios, cuentas o inventarios, probablemente necesites un control más granular de los datos que el que muchas API REST pueden proporcionar por sí solas. Esto fuerza a los desarrolladores a situaciones en las que tienen que codificar en torno a las limitaciones de REST para obtener los datos precisos que la aplicación requiere, haciendo cosas como filtrar y combinar datos en el código, lo que lleva más tiempo e inevitablemente erosiona la eficiencia de la aplicación.

Además, como la aplicación es móvil, también hay que lidiar con problemas de conectividad cuando se depende de API REST a través de la web para obtener datos, una tarea nada trivial.

Aquí es donde probablemente empezarás a encontrarte con los puntos débiles de la API REST...

Puntos débiles del uso de REST

Falta de validación de esquemas y tipos de datos

Cada API REST se construye específicamente para las entidades que expone y, por tanto, no existe un protocolo estándar para la validación de esquemas o tipos de datos esperados. Esto significa que los desarrolladores deben ser conscientes de estos detalles y solucionarlos, o sufrir las consecuencias en forma de inestabilidad y fallos de la aplicación.

Por ejemplo, podría enviar una solicitud de una lista de productos utilizando "GET /productos", pero no hay forma de validar que el endpoint existe. Esto es especialmente problemático cuando se utiliza un endpoint que estaba disponible en versiones anteriores de una API que ya no está disponible en versiones más recientes.

E incluso si el endpoint existe, no hay forma de validar los detalles de la entidad que devuelve. Por ejemplo, un producto determinado de la lista de productos devuelta puede haber sido modificado o eliminado por otro cliente desde que se solicitó la lista.

Los tipos de datos también pueden diferir para los mismos datos entre endpoints, dependiendo de cómo se haya implementado cada uno. Por ejemplo, estas dos solicitudes de punto final devolverán los mismos datos, pero con ligeras diferencias:

Solicitar Respuesta
GET /productos/123 {
 Precio: 10,95
 Divisa: "USD"
}
GET /inventario/producto/123 {
 Precio: "10.95",
 Divisa: "USD"
}

En este ejemplo, una respuesta devuelve el precio del producto como un double, y la otra devuelve el precio del producto como una cadena. Estos son los tipos de datos que pueden hacer que las aplicaciones se vuelvan inestables o se bloqueen.

Transformación de datos de ida y vuelta

Manejar tipos de datos requiere un ciclo interminable de transformación de los datos de la entidad en lo que espera cada extremo de la conexión. Por ejemplo, para que una aplicación aproveche una API REST, el flujo de comunicación sería algo parecido a esto:

  1. Definir modelos de datos de entidades
  • Definir modelos de datos en código nativo
2. Serializar datos en JSON
  • Convertir objetos nativos en JSON
  • Formatee entidades de datos nativas en una estructura que su punto final REST espera
3. Transporte por HTTP
  • Codificar datos como cadena JSON
  • Codificar cadena JSON como datos de formulario HTTP multiparte
  • Enviar una solicitud POST
4. Decodificación de datos en backend
  • Descodificar datos POST
  • Decodificar cadena JSON
5. Operaciones CRUD en la base de datos
  • Cree objetos que se correspondan con el almacenamiento de su base de datos
  • Convertir los objetos en el formato de datos esperado por la base de datos

A lo largo del flujo del proceso, los datos se transforman una y otra vez al pasar de la base de datos a la aplicación y viceversa. Aquí es donde existe el mayor riesgo de que una solicitud o respuesta contenga datos que la otra parte no espera, lo que provocaría inestabilidad o un bloqueo. Y el problema se agrava por la falta de validación de esquemas y de una tipificación estricta de los datos en REST.

Traslación de la lógica empresarial a un modelo de transporte sencillo

Si desarrollas siguiendo el modelo de dominio, diseñas entidades cuidadosa e intencionadamente para que se ajusten a los requisitos de las características del producto y sigan la lógica empresarial de los casos de uso previstos para tu aplicación.

Pero, para aprovechar una API REST, tienes que volver a imaginar tu dominio de negocio cuidadosamente diseñado en términos de operaciones CRUD sobre entidades. Lo que podría ser una única acción atómica en tu aplicación -por ejemplo, crear una nueva cuenta- puede requerir en realidad una serie de solicitudes múltiples a la API REST.

Por lo tanto, para aprovechar REST es necesario adaptar el modelo a la API y, en el proceso, se tiende a perder la riqueza y expresividad del modelo.

Enfrentarse a una Internet intrínsecamente poco fiable

La primera falacia de la lista de falacias de la informática distribuida es La red es fiable. L Peter Deutsch y sus colegas de Sun, autores de la lista, dijeron lo siguiente sobre las aplicaciones que dependen en exceso de una conexión de red sólida:

"Las aplicaciones de software se escriben con poca gestión de errores de red. Durante una interrupción de la red, estas aplicaciones pueden bloquearse o esperar infinitamente un paquete de respuesta, consumiendo permanentemente memoria u otros recursos. Cuando la red averiada vuelve a estar disponible, esas aplicaciones también pueden fallar al reintentar cualquier operación paralizada o requerir un reinicio (manual)."

Si utilizas aplicaciones móviles con regularidad, y además cambias de ubicación con frecuencia, como cuando vas al trabajo o de viaje, sin duda habrás experimentado la frustración de las zonas muertas de Internet que afectan a esas aplicaciones.

Como desarrollador, la forma de gestionar la disponibilidad de la red tiene enormes implicaciones en la experiencia de usuario de la aplicación. Hay muchos puntos potenciales de fallo introducidos por los problemas de red, y un sinfín de maneras de tratar de resolverlos, pero el resultado final es que tienes que implementar la lógica de comunicación y la gestión de errores tú mismo, lo que puede hacer que incluso las tareas más sencillas sean extremadamente complejas. 

Considere este diagrama de flujo para solicitar una lista de productos desde un punto final REST:

REST API endpoint flowchart for mobile apps

En el diseño inicial de la aplicación, la acción parece fácil de lograr con REST: emitir la solicitud, obtener la respuesta, actualizar la interfaz de usuario.

Pero la realidad es que, para cada solicitud, hay un puñado de estados posibles que hay que tener en cuenta y manejar, todos empezando por la disponibilidad de la red. Aunque el número de puntos de decisión puede parecer manejable a primera vista, fíjate en cuántos caminos conducen al fracaso, y esto solo para una única solicitud.

Ahora, considera que muchas acciones en tu aplicación requerirán que se emitan múltiples peticiones dependientes en rápida sucesión, cada una de ellas necesitando atravesar los puntos de decisión en el diagrama de flujo. Ahora multiplica este proceso por el número de peticiones que suele hacer tu aplicación, y será fácil ver cómo esto aumenta exponencialmente la probabilidad de un fallo.

En este escenario, ¿cómo se recupera si falla la última de una serie de peticiones dependientes? ¿Reintenta la solicitud hasta que tenga éxito? ¿Retrocede las peticiones anteriores de la serie? ¿Ignora el fallo por completo? Este es el tipo de problemas de desarrollo que pueden plantear las dependencias de red.

¿Son insuperables los retos de REST? Pues no, pero......

Los desarrolladores con talento siempre pueden encontrar soluciones a los problemas. Pero esto lleva tiempo y añade complejidad al código de la aplicación, y es probable que añada más consumo de recursos a la huella operativa de la aplicación, ralentizándola y haciendo que consuma más batería del dispositivo. La verdadera pregunta no es "¿cómo solucionar el problema?", sino "¿a qué precio?".

Los microservicios pueden ayudar a automatizar las tareas repetitivas cuando se utiliza REST, y los autores de API están utilizando medios cada vez más creativos para entregar puntos finales con GET y parámetros personalizados POST JSON, así como puntos finales que gestionan solicitudes en bloque.

Este tipo de enfoques abordan algunos de los dolores de cabeza cuando se utiliza REST, pero el puntos débiles discutidos en este post permanecen constantes:

    • Falta de validación de esquemas y tipos de datos
    • Transformación de datos de ida y vuelta
    • Traducción de la lógica empresarial a un modelo de transporte sencillo
    • Internet no es fiable por naturaleza

La plataforma de bases de datos Couchbase Mobile

Couchbase Mobile resuelve los puntos débiles de la API REST eliminando por completo la necesidad de usar REST para los datos. Es una solución integral de almacenamiento y sincronización de datos para aplicaciones móviles y de IoT que incluye una base de datos en la nube para escalabilidad y resiliencia, una base de datos integrada para el procesamiento de datos en el dispositivo que elimina la dependencia de una red para el acceso a los datos, y una pasarela de sincronización de datos que sincroniza automáticamente los cambios de datos entre la base de datos backend y otros clientes de aplicaciones para la coherencia de los datos.

Couchbase mobile data platforms

La pila de Couchbase Mobile incluye:

Couchbase Capella - Una base de datos NoSQL como servicio (DBaaS) en la nube totalmente gestionada con SQL, búsqueda, análisis y soporte de eventos.

Capella App Services - Servicio totalmente gestionado de sincronización bidireccional, autenticación y control de acceso para aplicaciones móviles y de borde.

Couchbase Lite - Una base de datos NoSQL móvil integrada compatible con SQL, sincronización peer-to-peer integrada y amplia compatibilidad con plataformas móviles, incluidos iOS (Swift, Obj-C), Android (Java, Kotlin), Windows (C#, .NET) y dispositivos integrados personalizados/IoT (C-API).

Capella App Services actúa como ingrediente vinculante en la pila, proporcionando sincronización de datos basada en websockets entre la base de datos backend de Capella, los centros de datos periféricos y las aplicaciones integradas de Couchbase Lite en los dispositivos periféricos. El uso de podría decirse que websockets ofrece un medio de transporte de datos superior a REST para aplicaciones móviles con grandes cargas de datos de gran volumen. Con App Services, los cambios en los datos se replican de forma instantánea y automática en todo el ecosistema de aplicaciones a medida que la conectividad lo permite, mientras que durante las interrupciones de la red, las aplicaciones siguen funcionando gracias a la base de datos integrada Couchbase Lite.

Sincronización peer-to-peer de Couchbase Lite

Además de sincronizar datos entre la nube y el borde a través de App Services, Couchbase Lite también puede sincronizar datos de igual a igual a través de redes de área local y personal.

La función de sincronización Peer-to-Peer de Couchbase Lite permite que los datos se sincronicen directamente entre dispositivos sin un punto de control central, lo que permite la colaboración en aislamiento donde los grupos de dispositivos que ejecutan aplicaciones integradas de Couchbase Lite pueden compartir datos entre sí sin importar el acceso a la nube o la conectividad a Internet. Cuando la conectividad a Internet está disponible, los clientes de Couchbase Lite pueden sincronizarse con la nube aprovechando App Services.

how to do peer-to-peer mobile sync

La ventaja de Couchbase

Con Couchbase, compartes las mismas entidades de datos desde la base de datos en la nube hasta las aplicaciones que se ejecutan en dispositivos móviles, y aprovechas una forma estándar sencilla de realizar operaciones CRUD en esos datos: SQL. Como el procesamiento de datos está integrado en tu código, ya no tienes que depender de las redes para acceder a ellos, y eliminas la necesidad de transformar los datos entre la capa de transporte, la capa de datos y la interfaz de usuario.

Con Couchbase obtienes:

Funcionalidad offline - Las aplicaciones funcionan en todo momento gracias a la base de datos local integrada, y los cambios se sincronizan automáticamente con la base de datos en la nube y otros clientes de aplicaciones cuando hay conectividad de red.

Desarrollo más fácil - Construya su lógica empresarial y trabaje con entidades de datos utilizando el lenguaje de programación que prefiera. Se acabaron las limitaciones de sus dominios de negocio para satisfacer los requisitos de una capa de comunicación y las interminables transformaciones de datos de ida y vuelta.

Seguridad a toda prueba - Couchbase Mobile proporciona autenticación, control de acceso basado en roles, encriptación AES 256 en reposo y encriptación TLS 1.2 en el cable.

Sincronización de datos de extremo a extremo - No pierdas tiempo creando una función de almacenamiento en caché, utiliza en su lugar una solución de sincronización de datos lista para usar y libera a tu equipo para que trabaje en hacer que el front-end de la aplicación sea lo mejor posible. Couchbase utiliza websockets, mucho más fiables y resistentes que REST, para sincronizar datos al instante entre la nube y los dispositivos móviles, incluso entre plataformas.

Pruebe Couchbase Mobile gratis

Con Couchbase Mobile, puedes eliminar los puntos problemáticos de REST de la ecuación, simplificando el desarrollo de aplicaciones móviles, reduciendo las dependencias de la conectividad de red y mejorando la velocidad general, la eficiencia y la capacidad de respuesta de tu aplicación.

No pierdas ni un minuto más de sueño usando REST para construir tus aplicaciones móviles, empieza con Couchbase para un desarrollo más fácil, mejor rendimiento, capacidad de respuesta más rápida y funcionalidad offline en primer lugar.

 

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Marketing de productos Couchbase

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.