Índice
(Inicio)
(Inicio)
Conocimientos intermadios en bases de datos, servidores, microservicios y python. Además del manejo de entornos virtuales con las siguientes instalaciones
Debe contar con el siguiente conjunto de herramientas instaladas
- Python
- Editor de texto/IDE
- MongoDB
- Postman
Con lo anterior en mente es importante mencionar que se recomienda la integración de un entorno virtual para el desarrollo de nuevas funcionalidades dentro de la API, ya que pudiera existir el caso en el que alguna instalación ajena dentro del equipo produzca inconvenientes con la integración de nuestro software.
Comandos a ejecutar en la terminal:
> pip install virtualenv
> python -m venv APImg
> cd APImg/Scripts/activate
> cd ../..
> pip install Fastapi uvicorn pymongo
Se hace caso omiso de este apartado puesto que no debería haber intervención alguna por parte de usuarios finales o terceros ajenos al desarrollo del proyecto.
(Requisitos Desarrollador) (Requisitos Usuario) (Inicio)
Con nuestro entorno virtual creado y en ejecución mencionado en el punto anterior podemos proceder a ejecutar nuestro proyecto con los siguientes comandos
Dentro de la carpeta principal de la API ejecutar:
> uvicorn app:app
El comando anterior levantará nuestro servidor para comenzar a trabajar, sin embargo lo realizará con una configuración predeterminada y bastante deficiente para un constante desarrollo de nuevas funcionalidades e integraciones al sistema, por lo cual se recomienda utilizar la siguiente adición de parametros.
> uvicorn app:app --reload
Haciendo que nuestro servidor se reinicie cada que detecte algún cambio dentro de nuestro código de ruteo. Adicional a esto es posible adicionar mayor cantidad de parametros como el host, port, entre otros.
> uvicorn app:app --reload --host: <param> --port: <param>
(Inicio)
De manera adicional se incluiran archivos de la arquitectura y funcionamiento del sistema, así como un conjunto de datos que puede utilizar para realizar las pruebas pertinentes del sistema.
El uso de pruebas unitarias dentro del proyecto nos permite detectar errores dentro de cada funcionalidad del sistema, son de gran ayuda a la hora de intentar agregar una nueva funcionalidad así como ahorrar tiempo al momento de testear el sistema.
Primero es necesario crear un entorno virtual con el siguiente comando en una terminal CMD:
Una vez que nuestro entorno virtual este creado debemos ponerlo en marcha; primero entratemos hasta la carpeta Scripts
cd .\"nombre del entorno virtual"\Scripts
Ya dentro del directorio escribimos lo siguiente en la terminal
Para confirmar que el entorno virtual esta encendido debe aparecernos entre parentesis el nombre que le asignamos a nuestro entorno virtual seguido de la ruta como se muestra en este ejemplo
(nombre del entorno virtual) C:\Users\toled\Documents\APIText>
Como ya confirmamos que nuestro entorno virtual esta encendido procederemos a instalr las herramientas necesarias para poder usar la API (estas herramientas y sus versiones estan en el documento requirements.txt)
El uso de pruebas de integración dentro del proyecto nos da la ventaja de poder identificar de manera rápida las conexiones fallidas entre este y más microservicios que componen al software así como la integración al backend principal.
Para esta parte se hace uso de la herramienta de docker, la cual nos permite hacer un contenedor que almacene la API; para lograr esto se deben realizar las siguientes configuraciones
Primero se crea un documento llamado Dockerfile con la siguiente configuración:
FROM ubuntu
ENV DEBIAN_FRONTEND=noninteractive
WORKDIR /code
RUN apt-get update \
&& apt-get -y install tesseract-ocr \
&& apt-get install -y python3 python3-distutils python3-pip \
&& cd /usr/local/bin \
&& ln -s /usr/bin/python3 python \
&& pip3 --no-cache-dir install --upgrade pip \
&& rm -rf /var/lib/apt/lists/*
RUN apt update \
&& apt-get install ffmpeg libsm6 libxext6 -y
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./ /code
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
Despues un documento llamado docker-compose.yml con la siguiente configuración:
version: "3.9"
services:
apidocker:
build: ./
ports:
- "8000:8000"
environment:
- TESSDATA_PREFIX=/code
Y ahora se deben ejecutar los siguientes comandos en la terminal
Una vez creado el contenedor podra acceder a la siguiente direccion local en su navegador
(Pruebas Software) (Pruebas Hardware) (Inicio)
A continuación se muestran los diagramas de funcionamiento general de la API
(Inicio)
El despliegue se realiza de manera automatico con railway.
Primero nos dirigimos a la siguiente direccion https://railway.app/dashboard
- Nota.- Es necesario contar con una cuenta de Railway
Hacemos click en "New Project"
Click en ""Deploy from GitHub repo"
Type "dock[[enter]]"
Click en "Add variables"
Click en "Add"
Click en "New Variable"
Click en el campo "Value"
Oprima [[ctrl]]+[[V]]
Click en "Add"
Oprima este icono
Oprima este boton
Oprima aqui
Click en "Settings"
Click en "Generate Domain"
Click en "View Logs"
Click en este icono
Click en "testdocker-production.up.railway.app"
Click en "Testing"
Click en "Try it out"
Click en "Execute"
(Inicio)
El diseño de esta API se realizo en base al siguiente conjunto de tecnologias.
- Anyio ➡ Librería de redes y concurrencia asíncrona que funciona sobre asyncio o trio
- Click ➡ Paquete de Python para crear hermosas interfaces de línea de comandos de manera componible con tan poco código como sea necesario
- Colorama ➡ Hace que las secuencias de caracteres de escape ANSI (para producir texto de terminal coloreado y posicionamiento del cursor) funcionen bajo MS Windows
- FastAPI ➡ Desarrollo del Servidor
- H11 ➡ Conjunto de herramientas para la construcción de programas que hablan HTTP; h11 hace mucho más fácil implementar algo como requests o twistedweb
- Idna ➡ Soporte para el protocolo de Nombres de Dominio Internacionalizados en Aplicaciones (IDNA)
- Pydantic ➡ Validación de datos y gestión de configuraciones utilizando sugerencias de tipo de Python
- Pymongo ➡ Distribución de Python que contiene herramientas para trabajar con MongoDB
- Python 3.10.6 ➡ Lenguaje utilizado
- Sniffio ➡ Pequeño paquete cuyo único propósito es permitirte detectar bajo qué biblioteca asíncrona se está ejecutando tu código
- Starlette ➡ Framework/toolkit ASGI ligero, ideal para construir servicios web asíncronos en Python
- Typing_extensions ➡ Permitir la experimentación con nuevos PEPs del sistema de tipos antes de que sean aceptados y añadidos al módulo de tipado ?
- Uvicorn ➡ Manejo de peticiones HTTP
(Inicio)
Por favor lee el CONTRIBUTING.md para detalles de nuestro código de conducta, y el proceso para enviarnos pull requests.
(Inicio)
Puedes encontrar mucho más de cómo utilizar este proyecto en nuestra Wiki.
(Inicio)
Usamos SemVer para el versionado. Para todas las versiones disponibles, mira los tags en este repositorio.
(Inicio)
- ThunderGer - Trabajo Inicial - ThunderGer23
- R2D2 - Documentación - R2D2
- ItzeGar - ** - ItzeGar
(Inicio)
Este proyecto está bajo la Licencia "MIT" - mira el archivo LICENSE para detalles.
(Inicio)
ThunderGer
R2D2
ItzeGar
(Inicio)