Únete a ⁠ #Android11: The Beta Launch Show el 3 de junio.

Cómo crear aplicaciones cliente-servidor con gRPC

gRPC es un marco de trabajo RPC moderno, de código abierto y de alto rendimiento, que puede ejecutarse en cualquier entorno. Puede conectar servicios en centros de datos y entre ellos con soporte conectable para balanceo de cargas, seguimiento, verificación de estado y autenticación. También es aplicable en el último tramo de la informática distribuida para conectar dispositivos, aplicaciones móviles y navegadores a servicios de backend. Puedes encontrar documentación en el sitio web oficial de gRPC y obtener asistencia de comunidades de código abierto. En esta guía, encontrarás soluciones que te ayudarán a crear apps para Android con gRPC.

grpc.io es el sitio web oficial para el proyecto gRPC. Para obtener más información acerca de cómo funciona gRPC, consulta ¿Qué es gRPC? y Conceptos de gRPC. A fin de aprender a usar gRPC en una app para Android, consulta el ejemplo de Hello World en Guía de inicio rápido de Java para Android de gRPC. También puedes encontrar otros varios ejemplos de Android de gRPC en GitHub.

Características

Simplificación gracias a llamadas a procedimientos
Debido a que es RPC, el modelo de programación consiste en llamadas a procedimientos: el aspecto de herramientas de red de la tecnología se abstrae del código de la aplicación, lo que hace que parezca una llamada de función normal en proceso. Tu interacción cliente-servidor no estará limitada por la semántica de los métodos de recursos HTTP (como GET, PUT, POST y DELETE). En comparación con las API de REST, tu implementación se ve más natural, sin la necesidad de procesar metadatos del protocolo HTTP.
Transmisión de red eficiente con HTTP/2
La transmisión de datos de dispositivos móviles a un servidor de backend puede ser un proceso que requiera muchos recursos. Con el protocolo estándar HTTP/1.1, las conexiones frecuentes de un dispositivo móvil a un servicio en la nube pueden agotar la batería, aumentar la latencia y bloquear la conexión de otras apps. De forma predeterminada, gRPC se ejecuta en HTTP/2, que presenta la transmisión bidireccional, el control de flujo, la compresión de encabezado y la capacidad de multiplexar solicitudes a través de una única conexión TCP/IP. Como consecuencia, gRPC puede reducir el uso de recursos, lo que da como resultado tiempos de respuesta más rápidos entre tu app y los servicios que se ejecutan en la nube, el uso reducido de la red y una mayor duración de la batería para el cliente que se ejecuta en dispositivos móviles.
Asistencia incorporada de intercambio de datos de transmisión
gRPC se diseñó teniendo en cuenta la compatibilidad de HTTP/2 para la transmisión bidireccional de dúplex completo desde el inicio. La transmisión permite que una solicitud y una respuesta tengan un tamaño arbitrariamente grande, como operaciones que requieren subir o descargar una gran cantidad de información. Con la transmisión, el cliente y el servidor pueden leer y escribir mensajes simultáneamente y suscribirse entre sí sin realizar un seguimiento de los ID de recursos. Esto hace que la implementación de tu app sea más flexible.
Integración continua con el búfer de protocolo
gRPC usa búferes de protocolo (Protobuf) como su método de serialización/deserialización con el complemento codegen optimizado para Android (Protobuf Java Lite). En comparación con el formato basado en texto (como JSON), Protobuf ofrece un intercambio de datos más eficiente en cuanto a velocidad de ordenamiento y tamaño de código, lo que lo hace más adecuado para usarlo en entornos móviles. Además, la concisa sintaxis de definición de mensaje/servicio de Protobuf facilita mucho la definición de modelos de datos y protocolos de aplicación para tu app.

Descripción general sobre el uso

De acuerdo con el tutorial Conceptos básicos de gRPC: Android Java, el uso de gRPC con apps para Android implica cuatro pasos:

  • Definir servicios de RPC con búferes de protocolo y generar las interfaces de cliente de gRPC
  • Crear un canal que sirva como medio para las llamadas RPC entre el cliente y el servidor
  • Crear un cliente Stub como punto de entrada para iniciar llamadas RPC del lado del cliente
  • Realizar llamadas RPC al servidor remoto como lo harías cuando llamas a procedimientos locales

Para fines de demostración, en el ejemplo proporcionado, los bytes se transmiten en texto sin formato. Sin embargo, tu app siempre debe encriptar los datos de la red en producción. gRPC ofrece asistencia de encriptación SSL/TLS, así como intercambio de tokens OAuth (OAuth2 con servicios de Google) para autenticación. Para obtener más información, consulta TLS en Android y Cómo usar OAuth2.

Transporte

gRPC ofrece dos opciones de implementaciones de transporte para clientes de Android: OkHttp y Cronet.

Elección de un transporte (avanzado)

  • OkHttp
    OkHttp es una pila de redes liviana diseñada para usar en dispositivos móviles. Es el transporte predeterminado de gRPC para ejecutar en el entorno de Android. A fin de usar OkHttp como el transporte de gRPC para tu app, crea el canal con AndroidChannelBuilder, que une OkHttpChannelBuilder y registra un monitor de red con el SO Android para responder rápidamente a los cambios de red. Puedes encontrar un ejemplo de uso en gRPC-Java AndroidChannelBuilder.
  • Cronet (experimental)
    Cronet es la pila de redes de Chromium empaquetada como una biblioteca para dispositivos móviles. Ofrece una sólida compatibilidad de red con el protocolo QUIC de última generación, que puede ser especialmente efectivo en entornos de red poco confiables. Para obtener más información sobre Cronet, consulta Cómo realizar operaciones de red con Cronet. A fin de usar Cronet como transporte de gRPC para tu app, crea el canal con CronetChannelBuilder. Puedes encontrar un ejemplo de uso en Transporte de Cronet gRPC-Java.

En términos generales, recomendamos que las apps dirigidas a versiones recientes de SDK usen Cronet, ya que ofrece una pila de red más potente. La desventaja de usar Cronet es el aumento del tamaño de APK, ya que agregar la dependencia binaria de Cronet agregará >1 MB al tamaño de la app, en comparación con aproximadamente 100 KB para OkHttp. A partir de GMSCore v.10, se puede subir una copia actualizada de Cronet desde los Servicios de Google Play. Es posible que el tamaño del APK ya no sea una preocupación, aunque los dispositivos sin el último GMSCore instalado pueden preferir el uso de OkHttp.