Hoy os hablaré del desarrollo de un backend para una aplicación de smartphone en Laravel. Se relaciona este framework, merecidamente, con el entorno web; pero, como hablamos en otro articulo sobre desarrollo de backends para apps en Laravel, es perfectamente válido para el desarrollo de backends para apps móviles
Como asegurar el éxito al desarrollar una api de backend para tu app móvil
El hijo de Laravel
¿A caso tus padres nunca te han preguntado cómo funcionaba el móvil?
Dicho regalo es Lumen, el hijo al que Laravel pregunta sobre móviles.
Un micro-framework, una versión de Laravel más ligera, enfocado al desarrollo de micro-servicios y APIs de apps móviles. Este micro-framework nos permite crear un backend para nuestra app y, en el caso de que creciera mucho a nivel de usuarios, escalarlo con una arquitectura de micro-servicios mucho más potente y muy de moda en nuestros tiempos, metodología que usan grandes aplicaciones como Facebook o Instagram.
También podemos usar Laravel para dicho desarrollo, a pesar de tener ventajas y áreas de mejora. Laravel es más completo y lleva por defecto todas sus funcionalidades incorporadas. En cambio, en su hijo Lumen, tiene un proceso de configuración e instalación más laborioso, aunque no complicado. Aunque por otro lado, Lumen tiene una capacidad y velocidad de respuesta mucho mayor a Laravel, aproximadamente 10 veces más rápido.
En mi opinión, Lumen es "the way to go" por su escalabilidad y su rendimiento. Aunque lo recomendaría para a programadores que ya dominaran el framework, que tuviesen claros los conceptos de una arquitectura enfocada a servicios y su aplicación estuviera enfocada a "crecer". Laravel también nos serviría, pero quizás en una aplicación con menos escalabilidad y con menor cantidad de usuarios, recordando su desventaja de rendimiento, y sobretodo a programadores que aún no estén del todo familiarizados con el framework.
¿Qué necesitamos para hacer el backend de una app?
El concepto de API REST no varia según el dispositivo frontend, pues seguimos recibiendo peticiones y devolviendo objetos JSON. Sin embargo, debemos tener en cuenta que el mercado nos "obliga" a adaptar nuevas funcionalidades que en el mundo de la web no se usan tanto o, directamente, no se usan. Aquí os dejamos una lista de funcionalidades y los mejores paquetes/dependencias para desarrollar una app competitiva:
*Nota: Dichos paquetes están implementados para Laravel, en Lumen hay algunos con el mismo nombre, pero otros no. Aunque en el futuro podrían estar.
• Cualquier app que se precie debe incorporar un buen sistema de notificaciones, tal como nos han enseñado las grandes apps del mercado. Laravel nos ofrece Laravel Echo, un conjunto de paquetes para todo tipo de notificaciones, E-Mail, SMS, Notificaciones Push, Broadcasting (en tiempo real), etc. Con la simple implementación de Traits, eventos personalizados y con unas pocas magic functions, nos evita muchos quebraderos de cabeza a la hora de programar las notificaciones en una app. Creo que es de los paquetes más completos y mimados por los desarrolladores de Laravel.
◦ https://laravel.com/docs/7.x/broadcasting
• Hoy en día, es crucial priorizar la Seguridad en una aplicación. Para eso, usamos Laravel Passport, una dependencia de Laravel muy potente que nos permite autenticar los usuarios con un token y evitar que se robe información.
◦ https://laravel.com/docs/7.x/passport
◦ https://github.com/laravel/passport
• Es muy cómodo para el usuario iniciar sesión en nuestra app con APIs de terceros, como Google, Facebook, etc., pues Laravel nos ofrece Socialite, una inmensa lista de empresas y portales web con las que podemos ofrecer iniciar sesión en nuestra app y una integración facilísima.
◦ https://laravel.com/docs/7.x/socialite
◦ https://socialiteproviders.netlify.app/about.html
• En mi caso, cuando empecé en la programación me aterraban los pagos en una aplicación, pero Stripe cada vez más piensa en nosotros, y eso aprovecha Laravel Cashier, un sistema de pagos con una integración más fácil de lo que muchos os imagináis. Nunca está mal ganar algo de dinero con nuestra app, ¿verdad?.
◦ https://laravel.com/docs/7.x/billing
• Tanto como si desarrollamos una app para un cliente, para un colaborador o para nosotros, necesitaremos en muchos casos administrar el contenido de la propia. Voyager nos ofrece un panel de administración (backoffice) moderno, personalizable, bien documentado y escalable, en mi opinión el mejor, dejad que os enamore.
◦ https://voyager.devdojo.com/
• El Real-time es casi un must en la mayoría de apps de hoy. Por poner el ejemplo más famoso, los chats sin sockets son cosa del pasado, y quien no los implementa es porque no quiere. Laravel Echo nos ofrece un paquete que merece una mención aparte, ya que no solo nos sirve para notificaciones, Laravel WebSockets. Fácil integración y buena documentación, todo lo que le pedimos a una dependencia.
◦ https://docs.beyondco.de/laravel-websockets/
• Quizás un punto no tan vistoso pero no menos importante es detectar qué dispositivo se conecta a nuestra API. Es practico para enviar diferente información según el sistema operativo o restringir contenido sólo a dispositivos móviles, entre otros muchos ejemplos. La comunidad de PHP nos ofrece dos dependencias muy populares como Agent para detectar el SO y Laravel-mobile-detect para detectar el dispositivo.
◦ https://github.com/jenssegers/agent
◦ https://github.com/riverskies/laravel-mobile-detect
• Es innegable que vivimos en un mundo globalizado, y el objetivo de muchas empresas es tener consumidores en todo el planeta. Este fenómeno también pasa en el mundo de las apps móviles. Laravel Phone nos ofrece un formato estándar de los números de teléfono de todos los países, con la complicación que conlleva los prefijos y las longitudes de los números según cada país. De este modo podemos convertir los números de nuestros usuarios, simplemente sabiendo su país, a un formato universal (E. 164) para el envío de mensajes SMS, entre otros.
◦ https://github.com/propaganistas/laravel-phone#validation
◦ https://laravel-phone.herokuapp.com/
• Otro aspecto que heredamos de la globalización es el multi idioma en las aplicaciones, y mejor aún es la detección automática del idioma del cliente. Por eso tenemos otra dependencia de la comunidad, Laravel Language Detector. Con su ayuda podremos devolverle la información en el idioma del dispositivo y ahorrarnos un menú para la selección del mismo en el frontend.
◦ https://github.com/vluzrmos/laravel-language-detector
• Y por último y como paquete que nos facilitará la vida en Laravel, os quiero presentar a Laravel Telescope: un panel de motorización muy práctico para nuestra API. Nos permite ver los logs de una forma más elegante y sencilla, un visor de eventos, etc. Su instalación es insultantemente fácil.
◦ https://laravel.com/docs/7.x/telescope
Conclusión
Hoy hemos conocido al hijo de Laravel: Lumen. Una versión reducida de su padre más enfocada al alto rendimiento de las apps de smartphone. Pero no exime a Laravel de poder hacer un backend para una app móvil, simplemente es labor del programador o del equipo elegir qué tecnología usar en función del proyecto.
Y por otro lado, hemos visto un conjunto de situaciones que la revolución de los smartphones nos ha obligado a superar para mantenernos vivos en el mercado, y que hace 10 años no nos las hubiésemos planteado.
Simultáneamente, hemos repasado las mejores soluciones en forma de dependencias de Laravel para hacernos más livianos los problemas de una API enfocada a una app móvil.
En definitiva Laravel y Lumen son unos candidatos geniales para programar tu próxima API.
Tal vez te interese nuestro artículo sobre porqué Laravel es la clave para desarrollar un backend