SD - Guía 00 - Introducción - Desarrollo Full Stack

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

DISEÑO E IMPLEMENTACIÓN DE SISTEMAS DISTRIBUIDOS

Prácticas de Sistemas Distribuidos


Creando un API RESTful Básico con MEAN
WS, RESTful, CRUD, MEAN, (NodeJS, express, MongoDB, AngularJS), JSON

Introducción
El desarrollo de una aplicación distribuida profesional, como por ejemplo las actuales aplicaciones Web,
involucra multitud de tecnologías, herramientas, frameworks, perfiles profesionales tanto para su
diseño e implementación, como para su posterior mantenimiento. Para facilitar el trabajo, el diseño y el
desarrollo de este tipo de aplicaciones se suelen dividir en front-end (determina y proporciona la
interfaz con la que el usuario interactuará con la aplicación o servicio) y en back-end (contiene la lógica
de negocio de la aplicación en forma de servicios desacoplados).
Debido a la cantidad de herramientas que intervienen para proporcionar cobertura a cada tarea y a cada
componente, la cantidad de alternativas para cada una de ellas, y la gran variedad de tecnologías y
herramientas nuevas que aparecen cada día, es importante centrarse en un conjunto (una pila o stack)
de tecnologías y herramientas que facilite el desarrollo de la aplicación, cubriendo todas las
necesidades, trabajando de forma conjunta en un proyecto para crear una aplicación Web. Es por esta
razón que a este tipo de desarrollos y a sus desarrolladores se les suele denominar Full Stack.
En esta práctica nos centraremos en una pila basada en javascript conocida como pila MEAN (MEAN
Stack). Su nombre proviene de las principales herramientas y tecnologías que la conforman (figura 1):
Mongodb, Express, Angular y Nodejs.

Figura 1. Tecnologías involucradas en un desarrollo basado en la pila MEAN, junto con la relación entre los
diferentes componentes dentro de una Arquitectura Empresarial de n-Niveles.

1
DISEÑO E IMPLEMENTACIÓN DE SISTEMAS DISTRIBUIDOS

En la figura 1 se puede observar cómo se relacionan y organizan las diferentes herramientas y


tecnologías que forman parte de la Pila MEAN, cuáles son los principales elementos que intervienen en
la misma y cómo encaja dicha tecnología y elementos dentro de un estilo arquitectural basado en una
arquitectura empresarial de n-Niveles.
Un desarrollador Full Stack debe ser capaz de desarrollar front-end y back-end, tener conocimientos de
bases de datos, trabajar con diferentes sistemas operativos y lenguajes de programación, saber cómo
diseñar una aplicación UX/UI. En definitiva, se trata de uno de los perfiles más completos y, por lo tanto,
deseados y demandados en la actualidad.
En esta asignatura, debido a sus características, aunque se abordará el diseño completo de una
Aplicación Web a través de un proyecto, nos centraremos fundamentalmente en el desarrollo del back-
end, concretamente en el desarrollo de servicios y micro-servicos de back-end.

Objetivo de las prácticas


El objetivo global de las prácticas consiste en explorar un conjunto de tecnologías que faciliten el diseño
y la realización de aplicaciones distribuidas basadas en servicios o microservicios distribuidos sobre
Internet.
En concreto, el principal objetivo será crear un Servicio Web que proporcione una API RESTful sobre
HTTP que se comporte como un CRUD (Create, Read, Update and Delete) de una base de datos. Para
ello se emplearán tecnologías MEAN: NodeJS para el back-end, Express como framework, MongoDB
(junto con alguna biblioteca, p.ej. mongojs o mongoose, para facilitar la escritura del código) como
gestor de DB.
A partir de este servicio CRUD, como un objetivo más secundario, abordaremos el desarrollo del front-
end realizando dos aplicaciones (en función del tiempo que tengamos) que utilizarán este servicio CRUD
creado en el back-end: una pequeña utilidad de ToDo y la gestión de una ficha de empleados. Para ello,
nos apoyaremos nuevamente en la Pila MEAN, más concretamente, se hará uso de Angular para el
fornt-end, apoyado con la biblioteca Bootstrap para facilitar la creación de controles responsive, sin la
necesidad de tener que escribir mucho código HTML y, sobre todo, sin tener que describir decenas de
clases CSS.
En función del tiempo del que se disponga, se irán cubriendo también los principales aspectos de
seguridad que deben abordar este tipo de aplicaciones: comunicaciones seguras y cifradas,
autenticación de usuarios, autorización para el acceso a los recursos distribuidos, recuperación frente a
errores, etc.

Trabajo que realizar


Se debe seguir las guías que se proporcionarán a lo largo del curso, realizando para cada una de ellas las
siguientes tareas:
 Investigar acerca de los conceptos relacionados con cada guía: CRUD, MEAN, otros.
 Investigar acerca de las arquitecturas para sistemas distribuidos (estilos, modelos, patrones) y
patrones de intercambio de mensajes (MEP).
 Investigar acerca de la especificación de las interfaces entre servicios: WS, API, REST, RESTFUL,
GraphQL, SOAP, SPA (Single-Page Application), otros.
 Crear un back-end consistente en un conjunto de servicios Web RESTful y un conjunto de bases
de datos utilizando MongoDB.
 Crear un front-end, Implementando una aplicación SPA (Single-Page Application) tipo To-Do
basada en el Servicio Web (y la pila MEAN).
 Crear un nuevo front-end, implementando una aplicación de gestión de empleados basada en el
mismo servicio Web.

2
DISEÑO E IMPLEMENTACIÓN DE SISTEMAS DISTRIBUIDOS

 Elaborar la Memoria de la práctica. Se recomienda que dicha memoria se vaya elaborando de


forma incremental siguiendo las diferentes guías y enunciados que se vayan proporcionando
cada semana.

Requisitos
Para realizar las prácticas, se debe contar con los siguientes elementos:
 Equipo con Windows, Linux u OS X con conexión a Internet. Preferiblemente una máquina
virtual con la última versión estable de Linux.
 Tener instaladas las siguientes aplicaciones:
o Visual Studio Code + Plugins para Node, JS y TS.
o Postman.
o NodeJS (node y npm).
o Git (y una cuenta con un repositorio en GitHub o Bitbacket, por ejemplo).
o MongoDB.
 Conocimientos básicos de administración de SO, JS, HTML y CSS

Entregas
Se realizará una entrega a través de la aplicación UACloud en las fechas y formas que indicará el
profesor.
Dicha entrega debe contener, como mínimo, la documentación relacionada en el apartado anterior
junto con toda la documentación que se considere adecuada:
 Crear una memoria que será similar a la presente guía, pero:
o documentando cada apartado de las guías con capturas de pantalla cuando sea
conveniente (por ejemplo, la interacción con Postman).
o corrigiendo (si fuera necesario) el guion (bien por erratas o, sobre todo, por cambio de
las versiones, directorios, etc.),
o indicando y actualizando las aplicaciones, librerías y sus respectivas versiones por las
que hayan optado (si es el caso),
o creando un glosario de términos en los que se explique brevemente cada término,
acrónimo, etc. (por ejemplo: API, REST, RESTful, express, node, CRUD, Mongo, …).
o Instalar y configurar las aplicaciones y librerías indicadas (documentando las decisiones
tomadas)
 Crear un PDF con toda la documentación
 Proporcionar las URLs de los repositorios en los que estén los componentes del proyecto. Si
dichos repositorios son privados (que deberían serlo), se proporcionará también una contraseña
de aplicación para poder acceder a su contenido.

Contenido
A lo largo del curso se irá completando este documento con la publicación de diferentes guías en las que
se especificará qué se debe hacer en cada práctica.
Las guías básicas que se publicarán son:
 Guía 1. Preparación del Back-End.
 Guía 2. Creación de un API RESTFul Básico.
 Guía 3. Servicio Web CRUD mediante API RESTFul y MongoDB.
 Guía 4. Asegurando las rutas de nuestro Servicio Web.
 Guía 5. Seguridad (II).
 Guía 6. Servicios Web RESTFul de Registro y Autenticación.

3
DISEÑO E IMPLEMENTACIÓN DE SISTEMAS DISTRIBUIDOS

 Guía 7. Front-End con Angular. Primeros pasos.


 Guía 8. Aplicación Web toDoApp
 Guía 9. Refactorización del código
 Guía 10. Aplicación CrudRestEmpleados.
En función del tiempo disponible, se publicarán guías adicionales.

Recursos y referencias adicionales


Node.js
https://juanda.gitbooks.io/webapps/content/api/

NodeJS. Javascript en servidor


https://juanda.gitbooks.io/webapps/content/javascript/node.html

API y Arquitectura REST (AJAX, CORS, Autenticación)


https://juanda.gitbooks.io/webapps/content/api/arquitectura-api-rest.html

Creación de un API con NodeJS


https://juanda.gitbooks.io/webapps/content/api/creacion_de_una_api_con_nodejs.html

NodeJS y SSL/TLS
https://www.sitepoint.com/how-to-use-ssltls-with-node-js/
https://blog.mgechev.com/2014/02/19/create-https-tls-ssl-application-with-express-nodejs/

Registro, Autenticación y Autorización


https://blog.restcase.com/4-most-used-rest-api-authentication-methods/

JSON Web Token (JWT)


https://jwt.io/
https://www.npmjs.com/package/jwt-simple
https://www.npmjs.com/package/bcrypt

Seguridad adicional
https://expressjs.com/es/advanced/best-practice-security.html

Single Page Applications (SPA)


https://juanda.gitbooks.io/webapps/content/spa/arquitectura_de_un_spa.html

Evolución de CSS
https://juanda.gitbooks.io/webapps/content/css/evolucion.html

Proyecto de Web Básica


https://juanda.gitbooks.io/webapps/content/proyectos/web_basica.html

Web con Bootstrap y Gulp


https://juanda.gitbooks.io/webapps/content/proyectos/bootstrap_gulp.html

Desarrollo de aplicaciones Web


https://www.gitbook.com/?utm_source=legacy&utm_medium=redirect&utm_campaign=close_legacy

También podría gustarte