,---, .--.--. ,---, ,---, / / \ .' \ / / '. ' .' \ .' .' `\ / . : / ; '. | : /`. / / ; '. ,---.' \ . / ;. \ : : \ ; | |--` : : \ | | .`\ |. ; / ` ; : | /\ \| : ;_ : | /\ \ : : | ' |; | ; \ ; | | : ' ;. :\ \ `. | : ' ;. : | ' ' ; :| : | ; | ' | | ;/ \ \`----. \| | ;/ \ \' | ; . |. | ' ' ' : : | \ \ ,'__ \ \ |' : | \ \ ,'| | : | '' ; \; / | | | ' '--' / /`--' /| | ' '--' ' : | / ; \ \ ', / | : : '--'. / | : : | | '` ,/ ; : / | | ,' `--'---' | | ,' ; : .' \ \ .' `--'' `--'' | ,.' `---` '---' Almacenamiento Seguro de Archivos Durables Organizados
- Nombre del Grupo: ASADO (Almacenamiento Seguro de Archivos Durables Organizados)
- Integrantes: Félix Cuello
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
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.
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
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.
Este endpoint es para un keep_alive (que se podría configurar en un load balancer)
curl -X GET localhost:3000/ping
Los endpoints de carpetas administran las carpetas.
Este endpoint lista el contenido de la carpeta actual
curl -v -X GET localhost:3000/location/carpeta/asdf
Este endpoint crea una nueva carpeta.
curl -v -X POST localhost:3000/location/carpeta/asdf
Este endpoint borra una carpeta. ESTA OPERACIÓN ES IRREVERSIBLE.
curl -v -X DELETE localhost:3000/location/carpeta/a/borrar/
Este endpoint renombra una carpeta.
curl -v -X PATCH localhost:3000/location/carpeta/asdf -H "Content-Type: application/json" -d '{"new_location":"/carpeta/fdsa/"}'
Los endpoints de archivos administran los archivos adentro de las carpetas.
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
Este endpoint permite descargar un archivo de una determinada carpeta
curl -X GET localhost:3000/file/carpeta/asdf/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"}'
Este endpoint permite borrar un archivo
curl -X DELETE /file/carpeta/destino/filename