
Aprende a construir tu API de lado servidor (server-side) con Swift y usando la librería Vapor, la más popular y con más apoyo de la comunidad open source. Conviértete en un auténtico full-stack developer usando el mismo lenguaje en la parte cliente (frontend) y el desarrollo en servidor (backend). Despliega tus apps en cualquier servicio como Heroku, AWS, Azure o tu propio servidor Linux, cumpliendo todos los estándares. Apúntate ya.
Gracias por comprar nuestro curso “Swift de lado servidor con Vapor”. Prepárate porque vas a dar una evolución de tu carrera profesional hacia un verdadero Full Stack. ¿Por qué? Porque en el momento que tenemos una experiencia de desarrollo sostenida con un ingrediente común, el lenguaje, ya solo tenemos que aprender las formas o peculiaridades de diferentes librerías. Nada más. Y al igual que en tus desarrollos para apps móviles (de frontend) usas librerías tanto de Apple como de terceros y aprendes a usarlas sin problema porque usan el mismo lenguaje de programación, aquí te pasará lo mismo.
Estamos seguros que aprenderás a usar Vapor, la librería con mayor futuro y proyección del panorama de lado servidor en Swift, de una forma fácil y sencilla.
Y si tienes cualquier duda, no dudes en poner preguntas en cualquier lección o enviarnos un mensaje que contestaremos lo antes posible.
Gracias por tu confianza y bienvenido a tu "Server Side".
¿Qué es un lado servidor?
¿Qué es una API de servidor o una app de lado servidor?
Bases de datos y persistencia
Swift en lado servidor
Swift, un lenguaje de propósito general.
Antecedentes, código interpretado o en VM software
Swift, la web se acerca a la programación tradicional
Swift, código compilado e integrado con estándares
Así funciona un lado servidor
Servicios web, SOAP y REST
Petición de datos, método GET
Petición de datos, método POST
Métodos alternativos
Estados HTTP, la respuesta
Esquema de una petición y una respuesta
SwiftNIO, procesos asíncronos en red
De lo síncrono a lo asíncrono
Paradigma síncrono (así se funciona hoy día)
Paradigma asíncrono (conducido por eventos)
Arquitectura de una librería de red conducida a eventos
SwiftNIO 2.0
Vapor, librería funcional de lado servidor
Librería web con capa funcional en Swift
Funciones actuales y roadmap
Pre-requisitos
Comprobando las Command Line Tools
Sobre las versiones de Xcode, Swift y su compatibilidad
Instalando Homebrew
Comprobando que nuestra instalación es compatible con Vapor
Instalar Vapor Toolbox
Instalando Vapor ToolBox
¿Qué es la Toolbox y qué es la librería de por sí?
Creando un nuevo proyecto
Creando el proyecto por defecto
Tipos de plantillas para poder utilizar
Revisando la estructura del proyecto
Arrancando el servidor por primera vez
Revisando la estructura
Las partes esenciales del proyecto Vapor
Base de datos y migraciones
Enrutamientos
Limpiando la plantilla
Usando parámetros como URL
Concepto de enrutamiento dinámico
Captura de los parámetros de la URL
Probando la implementación
Parámetros en línea
Concepto de parámetros en línea
Consulta de la petición
Devolviendo errores con el método Abort
Probando la implementación
JSON de entrada, de salida y Postman
El método POST
Creando JSON desde el tipo Content
Devolviendo JSON
Instalando Postman y aprendiendo a usarlo
Probando el método POST
Métodos PUT, DELETE y otros
Método DELETE
Los diferentes métodos PUT
El método ON genérico para cualquier método
Colecciones de routes
Creando una colección
Traspasando nuestras pruebas para que respondan como colección en un controlador
Convirtiendo closures en funciones para organizar
Probando las llamadas desde su nueva colección
Futuros y promesas
Llamadas bloqueantes en la CPU
¿Qué es un futuro?
¿Qué es una promesa?
La promesa es el contenedor de un futuro
Cualquier operación asíncrona es un futuro contenido en una promesa
Uso de flatmap y map en el proceso de los futuros
Fluent, ORM de base de datos
Mapeado relacional de objetos
Cómo funciona Fluent para crear una tabla o entidad
Creando una tabla
Creando un fichero para la nueva tabla en nuestro modelo
Conformando a los tipos necesarios para ser usados en base de datos
Incorporando la tabla a la migración
Conformando al tipo migración
Creando un dato desde la API
Creando el controlador para la tabla Users
Creando la RouteCollection
Función de creación de un usuario
Creación de la operación POST
Validando la implementación
Consultando uno o varios registros
Creando una consulta que devuelve un array con todos los registros de una tabla
Filtrando por un dato concreto con parámetros dinámicos por URL
Probando la implementación
Consulta personalizada a través de un JSON
Creando un JSON para consulta
Filtrando una consulta a través de un predicado
Trabajando con opcionales en un futuro
Probando la consulta
Consulta personalizada con parámetros GET
Recuperando el parámetro del GET
Aplicando a la consulta anterior (magia copy+paste)
Comprobando la implementación
Actualizando un dato no clave
Crear el struct para actualizar
Una función que actualiza
Accediendo al resultado del futuro con flatMap y map
Actualizando el dato con el método PUT
Probando la implementación
Actualizando un dato por parámetros en linea
Accediendo al futuro de la llamada por parámetros
Accediendo al futuro del contenido enviado
Procesando dos futuros a la vez
Actualizando el dato con la ayuda de dos fuentes diferentes
Probando que todo funciona
Borrando un dato y transformando las respuestas a estados HTTP
Borrado tal cual. No hay confirmación.
El método DELETE
Transformar un futuro en un tipo de estado HTTP
Probando la implementación
Borrando desde una consulta de predicado
Borrando desde una consulta de parámetros GET
Borrando sin acceder al futuro directamente
Probando el ciclo CRUD desde una app iOS
Presentando la app frontend en iOS
Cómo usar los mismos tipos de datos en ambos proyectos
Repasando la conexión de red
Probando la app
Persistiendo a disco y usando DB Browser for SQLite
Cambiando la base de datos de memoria a disco
Instalando DB Browser for SQLite para consultar la base de datos
Probando
Cambiando el índice a un UUID
Cambiando protocolos
Probando a crear un nuevo registro con UUID
Consulta con parámetros de URL con el nuevo ID
Creando una tabla hija
Creando una tabla GAMES, hija de USERS
Incluir el campo del ID del padre como dato del hijo
Relación de hijo a padre
Relación de padre a hijo (inversa)
Creando registros hijos
Generando el controlador para los registros hijos
Crear un nuevo registro hijo con el ID de la tabla padre
Crear un nuevo registro hijo con un dato secundario del padre
Consultas anidadas de padres a hijos
Consultando todos los juegos de un usuario a través de la propiedad hija
Consultando un solo juego de un usuario concreto
Probando
Actualizando registros hijos
Re-utilizando consultas
Actualizando datos del juego
Probando que todo funciona
Relaciones de n a n entre tablas (pivotes)
Creando una tabla para relación de n a n
Tablas pivotes y sus typealias
Viendo la estructura de la tabla creada
Creando datos para pivotes
Creando películas
Creando el pívot a partir de una doble consulta
Probando la creación
Consultas a través de pivotes y case insensitive
Creando la consulta
Cargando los datos de películas y pivotes para probar la consulta
Modificando las consultas para insensibilidad de mayúsculas y minúsculas
Probando
Filtrando, agrupando y ordenando consultas
Operaciones AND y OR agrupadas
Filtros con rango
Ordenación por campos
Ordenar de forma ascendente y descendente
Configurando el proyecto para usar otra base de datos
Cambiando y actualizando las dependencias del proyecto
Reconfigurando los tipos en el proyecto
Instalando pgAdmin para monitorizar la base de datos
Configurando el contenedor de base de datos local con Docker
Levantando el contenedor de base de datos
Se borran los datos
Cómo funcionan los contenedores Docker por defecto
Nuevo comando de arranque
Comprobando que ahora no se borran los datos
Creando un fichero .sh para facilitar el arranque
Modificando un modelo de datos ya existente
Creando un campo en una tabla ya existente
Cómo borrar un campo
Apunte de Swift 5
Probando y repasando
Migración de datos o limpieza
Instalando las librerías de autenticación y adaptando la app
Instalando el paquete Authentication
Actualizando Vapor
Añadiendo el campo “password” a la tabla
Creando versiones públicas de una tabla (con datos restringidos)
Adaptando el controlador a la versión pública de Users sin el campo “password”
Autenticación básica
Añadiendo extensiones de autenticación a la tabla (¿qué campos usas?)
Creando los middlewares de autenticación y protección
Controlando el acceso a funciones mediante autenticación
Registro del servicio de autenticación en la app
Guardando la clave cifrada con HASH en la base de datos
Probando la autenticación
Generando y validando tokens de sesión OAuth2
Creando una tabla para tokens
Creando la generación del token de forma criptográfica
Modificando la tabla de usuarios para usar el token
Usando la autenticación básica para devolver un token
Implementando OAuth2 en los métodos CRUD
Comprobando la generación de los tokens
Creando el middleware para autenticación
Cambiando el grupo de las funciones CRUD
Probando la autenticación en las funciones
Ciclo de vida de los tokens
Creando una función de logout del servidor
Re-generando tokens desde el login
Recordando flatMap vs map
Probando
Re-generando un token para una sesión
Comprobando la re-generación
Recibiendo información cifrada en la API, AES256-GCM
Explicando qué vamos a hacer exactamente
Longitudes de claves
Creando el controlador para la prueba
Recuperando, descifrando, desserializando y consultando
Repaso final
Cliente con AES256-GCM
Bajando e instalado la librería CryptoSwift (sin Cocoapods y en un Playground)
Creando los tipos de datos y valores necesarios
Creando la llamada de red genérica
Construyendo la llamada cifrada
Modificando la respuesta a la versión pública
Resolviendo un error extraño: cada try con su do en su ámbito
Repasando antes de probar
Probando (ahora sí, por fin)
Aprende a construir tu API de lado servidor (server-side) con Swift, usando la librería Vapor, la más popular y con más apoyo de la comunidad open source. Conviértete en un auténtico full-stack developer usando el mismo lenguaje en la parte cliente (frontend) y el desarrollo en servidor (backend). Despliega tus apps en cualquier servicio como Heroku, AWS, Azure o tu propio servidor Linux, cumpliendo todos los estándares. Apúntate ya.
---------
Si hay algo que está claro en los últimos años es que el desarrollo móvil es uno de los pilares de la tecnología y los servicios hoy día. Pero también sabemos que llevar toda la información solo en el móvil o tableta no es una solución práctica. Queremos servicios que sepan quiénes somos, que tengan nuestros datos en la nube para acceder a ellos desde cualquier parte, que nos permitan incluso en juegos comenzar una partida en el teléfono y acabarla en la tableta.
Vivimos en una época definida por el desarrollo continuado: ya no hay una versión final de una app o un juego, hay una evolución y constantes actualizaciones que mejoran funciones y corrigen errores, incorporando nuevas a cada paso. Y para todo ello, necesitamos conocer qué hacen nuestros usuarios en nuestras apps, sus hábitos, problemas con la misma, opciones favoritas, tiempo de uso… respetando su privacidad, todos esos son datos imprescindibles que estando solo en el dispositivo de cada usuario no sirven para nada.
Por esto, hoy día ya no se entiende una app como un elemento único: esta ha de tener lo que conocemos como un lado servidor. Una API, una app en la nube, un servicio web que, conectado a un servidor de base de datos potente, me permita registrar y realizar procesos que enriquezcan la experiencia de mis usuarios y me proporcionen más y mejor información sobre cómo usan mis servicios para poder mejorarlos en consecuencia.
El problema es que si queremos hacer una API de lado servidor, tenemos que aprender otros lenguajes de programación que no son los que usamos para desarrollar las apps: como Python o Javascript. Pero eso ya no es necesario porque Swift, como lenguaje de propósito general, tiene soporte más allá de iOS. Swift, desde su lanzamiento como código abierto a finales de 2015, ha ido evolucionando y adaptándose hasta llegar al estado actual en que ya es un lenguaje competitivo que permite desarrollos de lado servidor en Linux.
Ya existen librerías maduras que podemos usar en entornos de producción real para este tipo de desarrollos y aquí vamos a enseñarte a programar la librería de código abierto más popular del momento, la que cuenta con más apoyos de la comunidad open source, y que forma parte del grupo de trabajo del lenguaje Swift en Apple, para desarrollos de lado servidor: Vapor.
Conviértete en un auténtico Full Stack: la persona que domina varias arquitecturas de desarrollo, pero bien: usando un mismo lenguaje. Domina el front y el back. Porque al igual que en tu trabajo del día a día usas librerías de Apple o de terceros y las aprendes a manejar fácilmente porque son en Swift, aquí aprenderás una nueva librería que te ayudará a crear nuevas apps con nueva arquitectura: de lado servidor.
Aprenderás qué es Vapor, cuáles son sus características qué lo hacen diferente al resto o cómo gestiona los procesos. Te enseñaremos a construir, por ejemplos, una app de lado servidor, desde la instalación de Vapor hasta su despliegue en producción en un servidor. Cada paso desde el inicio al final del ciclo de vida de tu software.
Aprenderás a integrar bases de datos, peticiones de diferentes formas, a construir APIs de lado servidor con autenticación, con cifrado de datos (incluso en tránsito) y a cómo explotar todo esto desde tu app en Swift. Todo siguiendo los actuales estándar de arquitectura, seguridad y construcción de cualquier solución de lado servidor actual, pero en Swift.
Cierra el círculo y apúntate a un curso que te ayudará a completar la parte que le falta a tu app en Swift: el lado servidor. Haciendo uso de la moderna programación funcional, que aquí aprenderás paso a paso con conceptos fundamentales como los futuros y las promesas. Como todos los cursos que hacemos en Apple Coding Academy aprenderás entendiendo cómo se hace.
Bienvenido a tu lado servidor, a tu API RESTful, integrada con bases de datos PostgreSQL o MySQL, con cifrado, OAuth 2.0… aprende desde 0 todo lo necesario para ser experto en desarrollo en la nube y crea tus propias soluciones sin depender de otros equipos o desarrolladores y sin tener que aprender otros lenguajes.
¿A qué esperas? Apúntate ya.