Arquitectura Web - TP

   ,---,       .--.--.      ,---,           ,---,       /   /   \
 .'     \     /  /    '.   '  .' \        .'  .' `\    /   .     :
/   ;    '.  |  :  /`. /  /  ;    '.    ,---.'     \  .   /   ;.  \
:  :       \ ;  |  |--`  :  :       \   |   |  .`\  |.   ;   /  ` ;
:  |   /\   \|  :  ;_    :  |   /\   \  :   : |  '  |;   |  ; \ ; |
|  :  ' ;.   :\  \    `. |  :  ' ;.   : |   ' '  ;  :|   :  | ; | '
|  |  ;/  \   \`----.   \|  |  ;/  \   \'   | ;  .  |.   |  ' ' ' :
:  |    \  \ ,'__ \  \  |'  :  | \  \ ,'|   | :  |  ''   ;  \; /  |
|  |  '  '--' /  /`--'  /|  |  '  '--'  '   : | /  ;  \   \  ',  /
|  :  :      '--'.     / |  :  :        |   | '` ,/    ;   :    /
|  | ,'        `--'---'  |  | ,'        ;   :  .'       \   \ .'
`--''                    `--''          |   ,.'          `---`
                                        '---'
     Almacenamiento Seguro de Archivos Durables Organizados

Datos del grupo

  • Nombre del Grupo: ASADO (Almacenamiento Seguro de Archivos Durables Organizados)
  • Integrantes: Félix Cuello

Descripción del Negocio

La idea de este trabajo práctico es el de armar una API que sea un file server al estilo S3 que permita administrar carpetas y archivos de forma tal de que se puedan administrar carpetas y archivos de manera remota. Por eso el nombre:

  • A lmacenamiento => Es un repositorio de datos.
  • S eguro => Tiene replicación permanente.
  • A rchivos => Sólo permite almacenar archivos.
  • D urables => El almacenamiento es indefinido.
  • O rganizado => Los archivos pueden organizarse en carpetas.

Mínimamente tiene que permitir hacer lo siguiente:

  • Manejo de Carpetas
    • Crear
    • Borrar
    • Renombrar
  • Manejo de Archivos
    • Upload
    • Download
    • Renombrar
    • Borrar

Usuarios

A efectos de este TP NO voy a segmentar por usuarios. Los usuarios serían el “namespace” de las carpetas creadas en el sistema, para evitar colisiones en el nombre de las carpetas. Lo dejaría para una etapa posterior una vez implementada la API REST.

Instalación

El sistema se podría correr potencialmente standalone, pero para evitar instalar cosas dentro de mi computadora lo voy a utilizar con docker y docker compose.

Para facilitar el uso, además, voy a utilizar algunos comandos con make para simplificar los comandos de docker. Los comandos de make que se pueden utilizar son:

make build          # Construir los containers
make psql           # Para iniciar un cliente de psql en el caso de que se quieran ver cosas en la base de datos
make setup          # Hace el setup inicial de los directorios de base de datos (SOLO HACER UNA VEZ)
make shell          # Inicia un shell en el container de API
make up             # Iniciar el servicio
make db_create      # Crea las tablas de la base de datos
make db_drop        # Borra la base de datos completamente
make db_migrate     # Crea las tablas de la base de datos
make db_shell       # Abre un shell en el container de la base de datos

Configuración Inicial

Sólo hay que correr el siguiente comando para que inicialice todo.

make setup

Cabe aclarar que es necesario tener el comando make instalado que funciona como helper.

Endpoints

Extras

GET /ping

Este endpoint es para un keep_alive (que se podría configurar en un load balancer)

curl -X GET localhost:3000/ping

Carpetas

Los endpoints de carpetas administran las carpetas.

GET /location/carpeta/nueva

Este endpoint lista el contenido de la carpeta actual

curl -v -X GET localhost:3000/location/carpeta/asdf

POST /location/carpeta/nueva

Este endpoint crea una nueva carpeta.

curl -v -X POST localhost:3000/location/carpeta/asdf

DELETE /location/carpeta/a/borrar

Este endpoint borra una carpeta. ESTA OPERACIÓN ES IRREVERSIBLE.

curl -v -X DELETE localhost:3000/location/carpeta/a/borrar/

PATCH /location/carpeta

Este endpoint renombra una carpeta.

curl -v -X PATCH localhost:3000/location/carpeta/asdf -H "Content-Type: application/json" -d '{"new_location":"/carpeta/fdsa/"}'

Archivos

Los endpoints de archivos administran los archivos adentro de las carpetas.

POST /file/carpeta/destino/filename

Este endpoint permite subir un archivo a una determinada carpeta.

curl -v -X POST localhost:3000/file/carpeta/asdf/filename -F file=@docker-compose.yml

GET /file/carpeta/destino/filename

Este endpoint permite descargar un archivo de una determinada carpeta

curl -X GET localhost:3000/file/carpeta/asdf/filename

PATCH /file/carpeta/filename

Este endpoint permite renombrar un archivo (o moverlo de ubicación). Si se especifica un nombre sin path el archivo sólo cambia de nombre.

curl -v -X PATCH localhost:3000/file/carpeta/asdf/filename -H "Content-Type: application/json" -d '{"new_location":"/carpeta/nueva/nuevo_nombre"}'

DELETE /file/carpeta/destino/filename

Este endpoint permite borrar un archivo

curl -X DELETE /file/carpeta/destino/filename