Resumen: Como una alternativa más simple a SOAP y a WSDL, REST (Representational State Transfer) se ha ido implementando en proveedores de Web incluso en grandes proveedores como son Google, Yahoo! y Facebook, haciendo más fácil la transmisión de datos entre el cliente y el servidor y viceversa ya que es una arquitectura fácil de hacer y aprender debido a que usa métodos explícitos de HTTP. En este trabajo se va a realizar una comparación entre los frameworks Node.js y Sprint Web Services que son dos tecnologías que nos permiten desarrollar servicios Restful, se va a realizar pruebas de los principales métodos de HTTP (GET, POST, DELETE, PUT) desarrollando servicios web de cada tecnología y comparando características como robustez, integración con otras tecnologías, seguridad, soporte, mantenimiento, estabilidad y ejecución. Obteniendo así un reporte final en el que podamos escoger el framework que mejor se adapte a nuestras necesidades.
Palabras-clave: Node.js; Spring; Restful; Web services, Backend.
Abstract: As a simpler alternative to SOAP and WSDL, REST (Representational State Transfer) has been implemented in Web providers even in large providers such as Google, Yahoo! and Facebook, making it easier to transmit data between the client and the server and the other way as it is an easy to do and learn architecture because it uses explicit HTTP methods. In this work we will make a comparison between the frameworks Node.js and Sprint Web Services that are two technologies that allow us to develop Restful services, we will perform tests of the main HTTP methods (GET, POST, DELETE, PUT) developing web services of each technology and comparing features such as robustness, integration with other technologies, security, support, maintenance, stability and execution. Obtaining a final report in which we can choose the framework that best suits our needs.
Keywords: Node.js; Spring; Restful; Web services, Backend.
(ProQuest: ... denotes formulae omitted.)
1. Introducción
El desarrollo de servicios web se ha convertido en un estándar en la programación al momento de compartir información entre diferentes aplicaciones de software, ya que para distribuir sus funcionalidades estos son independientes del hardware, el sistema operativo, el lenguaje de programación y al igual que son independientes para proveer las funcionalidades, son independientes al momento de ejecutarse y desarrollarse para su uso. (Hamad, Saad, & Abed, 2010).
REST en un tipo de arquitectura orientada a recursos para el desarrollo de servicios web reemplazando especificaciones como SOAP (Pai, Asnika, & R, 2014).
Debido al gran incremento de aplicaciones desarrolladas, para las compañías es muy complicado el hecho de tener que desarrollar la misma aplicación para diferentes plataformas. (Xanthopoulos & Xinogalos, 2013). Gracias al desarrollo de los servicios web REST, no es necesario realizar una programación exclusiva para cada plataforma, ni limitada por el lenguaje, el hardware la ejecución sino que es suficiente con exponer el servicio web para ser consumido por los clientes.
Teniendo como objetivo la creación de servicios web REST, empresas como Spring y Node.js, han desarrollado frameworks que facilitan el desarrollo para ser expuestos para su utilización.
Por un lado esta Spring, que es un framework de la plataforma de Java que provee soporte para el desarrollo de aplicaciones Java ya que se encarga del manejo de la infraestructura permitiendo que el desarrollador se enfoque en la aplicación.
Y por otro lado tenemos a Node.js, una plataforma de ejecución la cual permite ejecutar JavaScript de parte del servidor que al combinarse con Express.js que es un framework que funciona sobre Node.js permitiendo generar enrutamiento para trabajar sobre el protocolo HTTP.
Con el planteamiento anterior el problema de esta investigación es identificar cuál de los dos frameworks es el más óptimo que se debe utilizar al momento de empezar a desarrollar una aplicación web.
Para esto en este documento se va a realizar una comparación entre los dos frameworks, describiendo el desarrollo del backend de una aplicación web, usando herramientas para probar como Postman que es un cliente para servicios web, para publicar los servicios se va a usar el servidor node.js y Spring Boot.
2. Contenido
Para el desarrollo de la comparación de los frameworks Spring vs Node.js, se realiza un análisis de las principales características como son robustez, integración con otras tecnologías, seguridad, soporte, mantenimiento, estabilidad y ejecución. Tomando en cuenta la arquitectura de cada tecnología.
2.1. REST
Los servicios web basados en la arquitectura REST (Representational State Transfer), son una alternativa más simple a SOAP y a WSDL, la cual transmite los datos sobre el protocolo estandarizado HTTP. Varias empresas como Google, Facebook y Yahoo! son casos de éxito al migrar sus servicios a esta tecnología. REST fue publicado en el año 2000 por Roy Fielding en la Universidad de California en una conferencia en la cual presentaba acerca de principios arquitectónicos de software para usar a la web como una plataforma de procesamiento distribuido (Seta, 2008).
El cliente tiene acceso a los recursos usando una única URI y una representación del recurso es devuelto con un estado de la transferencia de la información. (Pai, Asnika, & R, 2014)
REST no está estrictamente relacionado con el protocolo HTTP, pero es con el que más comúnmente se asocia.
Los servicios web basados en REST cumplen los siguientes principios:
* Utiliza métodos de HTTP de manera explícita: Cada método tiene una función específica: GET su uso es para obtener un recurso desde el servidor, POST se usa para crear un nuevo recurso en él servidor, PUT actualiza o cambia el estado de un recurso, DELETE elimina un recurso.
* REST no mantiene estado: Es necesario tener un escalamiento para cubrir la demanda constante y en crecimiento mediante balanceador, clúster y servidores con alta disponibilidad con el objetivo de distribuir las peticiones entre los equipos para disminuir el tiempo de respuesta.
* URI en formato de directorios: La estructura de los URI se la crea de una manera similar a directorios que es fácil de entender lo cual permite poder utilizarlos de manera intuitiva.
* Representaciones: Los servicios web REST emiten una respuesta en formato JSON o XML los cuales pueden ser usados por cualquier aplicación desarrollada en cualquier lenguaje.
Existen diferentes herramientas que se pueden utilizar al momento de desarrollar un servicio REST, lo importante es tener en claro en que plataforma se va a desarrollar, si será un sistema distribuido, lo más importante es emplear tecnologías de similares características que tengan compatibilidad en el sistema distribuido. Este artículo se centra en dos importantes tecnologías JAVA y JAVASCRIPT, en el caso de JAVA nos vamos a centrar en Spring Boot y para JAVASCrpIT usaremos Node.js.
2.2. Spring Boot
Es un framework Java basado en el Modelo Vista Controlador, mediante el cual gracias a los componentes y librerías que brinda hace fácil el desarrollo y despliegue de los servicios REST. Ha eliminado la necesidad de configurar la aplicación con el uso de archivos XML haciendo énfasis en el desarrollo de la misma. (Toledano López, López del Castillo, & Vázquez Sanchez, 2018)
Como las principales características de Spring Boot tenemos que nos permite crear aplicaciones de Spring independientes, al poseer servidores de aplicación embebidos como Tomcat, Jetty o Undertow, no es necesario generar un WAR para su ejecución, también permite configurar automáticamente bibliotecas de Spring y de terceros, no es necesario realizar una configuración en archivos XML, por lo que es más fácil y rápido la integración con otros proyectos de Spring.
Para realizar la parte práctica de la implementación de una aplicación mediante el uso de Spring Boot vamos a usar como IDE para el desarrollo Spring Tool Suite Versión: 3.9.5.RELEASE, el lenguajede programación va a ser Java, JDK 1.8.0_171, para la gestión de las dependencias se va a usar Gradle 4.9 y como gestor de base de datos vamos a usar MariaDB 10.3.8.
A continuación se va a generar un ejemplo de la implementación con Spring Boot:
Configuramos el archivo principal: settings.gradle
...
Luego configuramos el proyecto con sus dependencias en el archivo: build.gradle
...
Creamos la clase principal que permite ejecutar la aplicación, como podemos ver en la Figura 1.
En la Figura 2 vamos a mapear una entidad de la base de datos.
La Figura 3, nos muestra la implementación del controlador con el servicio REST de tipo GET.
Finalmente configuramos la conexión con la base de datos y las opciones del servidor que se va a levantar.
...
Como podemos ver en cinco pasos tenemos levantado un servicio web REST de tipo GET para obtener recursos desde la base de datos.
4. Node.js
Node es un entorno de ejecución orientado a eventos asincronos de JavaScript diseñado para construir aplicaciones de red escalables (Node.js, 2018).
Como las principales características de Node.js tenemos que permite desarrollar aplicaciones de red escalables, impulsada por eventos asíncronos, si no hay trabajo por hacer Node.js permanece dormido hasta que haya una conexión para que se active una llamada al servicio, todo esto es posible ya que se usa JavaScript del lado de servidor. (w3schools.com, 2018)
Para realizar la parte práctica de la implementación de una aplicación mediante el uso de Node.js vamos a utilizar como IDE de desarrollo Visual Studio Code Versión: 1.25.1, como lenguaje de programación JavaScript en la plataforma de Node.js Versión 8.11.2, para gestionar las dependencias que se va a usar para el desarrollo del proyecto utilizaremos NPM Versión 6.4.0 y finalmente como gestor de base de datos MongoDB 3.6.
A continuación se va a generar un ejemplo de la implementación con Node.js:
En la Figura 4 se muestra las dependencias con las que se va a levantar el servicio REST con la configuración principal del proyecto.
En la Figura 5 se va a realizar el mapeo del documento que se genera en la base de datos para realizar las transacciones.
A continuación se debe configurar la aplicación principal como se muestra en la Figura 6.
Una vez que se ha configurado la aplicación principal, se debe realizar la implementáción del server que va a conectarse con la base de datos y levantar la aplicación para ser usada en un puerto especificado en el código, tal y como lo podemos ver en la Figura 7
En la Figura 8 se muestra la configuración de las rutas que se van a poder configurar para el acceso a los servicios REST.
Finalmente se debe configurar un controlador que va a tener la lógica necesaria que los servicios REST van a proveer. Con el código que se muestra a continuación.
5. Spring vs Node.js
En esta sección se presenta un estudio comparativo entre spring framework y node. js. En este caso vamos a comparar un framework desarrollado en Java como Spring Boot y un framework hecho en JavaScript como Node.js, a continuación se muestra una analogía entre el entorno de ejecución de Java y JavaScript.
En la tabla 1 se realiza una comparación entre el entorno de ejecución de java que se ejecuta en la Máquina Virtual Java, mientras que Node.js se ejecuta en la plataforma V8. El funcionamiento es muy similar ya que ambas tecnologías funcionan con librerías que realizan funciones específicas.
En la tabla 2 podemos comparar características de cada framework en las que podemos ver características de cada framework con las funcionalidades que cada tecnología ofrece.
En la tabla 3 se encuentra el detalle de conexión entre cada tecnología con las bases de datos disponibles.
En la tabla 4 se realiza una comparación de cada tecnología al momento de integrar seguridad en las aplicaciones que desarrollan con cada tecnología.
6. Conclusiones
En base a la información recolectada, las tablas comparativas y los ejemplos realizados podemos sacar las siguientes conclusiones: las dos tecnologías son excelentes al momento de desarrollar servicios REST. Ya que las dos son fáciles de implementar y levantan un servicio REST en pocos minutos dependiendo de la funcionalidad que vaya a brindar; Spring tiene un nivel de madurez de varios años más sobre Node.js. Ya que el desarrollo del framework se ha basado en Java; Spring es más robusto al momento de hablar de seguridad, ya que posee su propio conjunto de aplicaciones para seguridad como es Spring Security; Spring Boot tiene integración con bases de datos transaccionales con las cuales se puede realizar aplicaciones empresariales debido a la posibilidad de utilizar las transacciones de las bases de datos para asegurar la integridad de la información.
Referencias
Hamad, H., Saad, M., & Abed, R. (2010). Performance Evaluation of RESTful Web Services for Mobile Devices. Int. Arab J. e-Technol, 1(3), 72-78.
Node.js, F. (2018, 8 26). About Node.js®. Retrieved from https://nodejs.org/es/about/: https://nodejs.org/es/about/
Pai, M. V., Asnika, S., & R, S. (2014). RESTful Web Services. International Journal of Advanced Information Science and Technology (IJAIST), 24(24), 46-50.
Rodriguez, A. (2008, 11 6). Restful web services: The basics. IBM developerWorks, 1-11. Retrieved from http://www.gregbulla.com/TechStuff/Docs/ws-restful-pdf.pdf
Seta, L. D. (2008, 11 13). Introducción a los servicios web RESTful. Retrieved from Dos Ideas: https://dosideas.com/noticias/java/314-mtroducrion-a-los-servirios-webrestful
Toledano López, O. G., López del Castillo, D. C., & Vázquez Sanchez, Á. A. (2018). Capa de Servicios para la Plataforma de Procesamiento de Datos Educativos Masivos de La Faultad 4 de la Universidad de las Ciencias Informáticas. La Habana.
w3schools.com. (2018, 08 26). Node.js Tutorial. Retrieved from https://www. w3schools.com/nodejs/nodejs_intro.asp: https://www.w3schools.com/nodejs/ nodejs_intro.asp
Xanthopoulos, S., & Xinogalos, S. (2013, Septembe). A comparative analysis of crossplatform development approaches for mobile applications. In Proceedings of the 6th Balkan Conference in Informatics, 213-220.
You have requested "on-the-fly" machine translation of selected content from our databases. This functionality is provided solely for your convenience and is in no way intended to replace human translation. Show full disclaimer
Neither ProQuest nor its licensors make any representations or warranties with respect to the translations. The translations are automatically generated "AS IS" and "AS AVAILABLE" and are not retained in our systems. PROQUEST AND ITS LICENSORS SPECIFICALLY DISCLAIM ANY AND ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES FOR AVAILABILITY, ACCURACY, TIMELINESS, COMPLETENESS, NON-INFRINGMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Your use of the translations is subject to all use restrictions contained in your Electronic Products License Agreement and by using the translation functionality you agree to forgo any and all claims against ProQuest or its licensors for your use of the translation functionality and any output derived there from. Hide full disclaimer
© 2019. This work is published under https://creativecommons.org/licenses/by-nc-nd/4.0 (the “License”). Notwithstanding the ProQuest Terms and Conditions, you may use this content in accordance with the terms of the License.
Abstract
Abstract: As a simpler alternative to SOAP and WSDL, REST (Representational State Transfer) has been implemented in Web providers even in large providers such as Google, Yahoo! and Facebook, making it easier to transmit data between the client and the server and the other way as it is an easy to do and learn architecture because it uses explicit HTTP methods. In this work we will make a comparison between the frameworks Node.js and Sprint Web Services that are two technologies that allow us to develop Restful services, we will perform tests of the main HTTP methods (GET, POST, DELETE, PUT) developing web services of each technology and comparing features such as robustness, integration with other technologies, security, support, maintenance, stability and execution. Para realizar la parte práctica de la implementación de una aplicación mediante el uso de Spring Boot vamos a usar como IDE para el desarrollo Spring Tool Suite Versión: 3.9.5.RELEASE, el lenguajede programación va a ser Java, JDK 1.8.0_171, para la gestión de las dependencias se va a usar Gradle 4.9 y como gestor de base de datos vamos a usar MariaDB 10.3.8. Como las principales características de Node.js tenemos que permite desarrollar aplicaciones de red escalables, impulsada por eventos asíncronos, si no hay trabajo por hacer Node.js permanece dormido hasta que haya una conexión para que se active una llamada al servicio, todo esto es posible ya que se usa JavaScript del lado de servidor. (w3schools.com, 2018) Para realizar la parte práctica de la implementación de una aplicación mediante el uso de Node.js vamos a utilizar como IDE de desarrollo Visual Studio Code Versión: 1.25.1, como lenguaje de programación JavaScript en la plataforma de Node.js Versión 8.11.2, para gestionar las dependencias que se va a usar para el desarrollo del proyecto utilizaremos NPM Versión 6.4.0 y finalmente como gestor de base de datos MongoDB 3.6.
You have requested "on-the-fly" machine translation of selected content from our databases. This functionality is provided solely for your convenience and is in no way intended to replace human translation. Show full disclaimer
Neither ProQuest nor its licensors make any representations or warranties with respect to the translations. The translations are automatically generated "AS IS" and "AS AVAILABLE" and are not retained in our systems. PROQUEST AND ITS LICENSORS SPECIFICALLY DISCLAIM ANY AND ALL EXPRESS OR IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES FOR AVAILABILITY, ACCURACY, TIMELINESS, COMPLETENESS, NON-INFRINGMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Your use of the translations is subject to all use restrictions contained in your Electronic Products License Agreement and by using the translation functionality you agree to forgo any and all claims against ProQuest or its licensors for your use of the translation functionality and any output derived there from. Hide full disclaimer
Details
1 Universidad de las Fuerzas Armadas ESPE, Centro de Postgrados, 170511, Quito, Ecuador
2 Universidad Estatal Península de Santa Elena, Santa Elena, Ecuador - UPSE, Av. La Libertad, Santa Elena, Ecuador