- Python (realizado en python 3.8)
- Django
- Django Filter
- Django model utils
- Graphene
- .EVN
Clone the project
git clone https://github.com/gustav0/swapi.git
Move into de repo and install dependencies
pip install -r requirements.txt
Create a .env file with a secret key or get one manually and set it in the settings.py
python -c 'from django.core.management.utils import get_random_secret_key; print("SECRET_KEY={}".format(get_random_secret_key()))' > swapi/.env
Run migrations and load fixtures
python manage.py migrate
python manage.py load_fixtures
Now the project is all set.
python manage.py runserver
python manage.py test
Agregué un collection de postman dentro del directorio extra
del repositorio, el cual contiene todos los request ya armados para hacer pruebas (le quité todas las variables del environment para que no tengan que crear nada, si se me pasó alguna me disculpo).
(Perdón por el spanglish.)
- Creo que cumplí con todas las consideraciones, pero tengo una observación con los unittests:
- Solo realicé tests para
People
por temas de tiempo. - Utilicé un id fijo en el código para verificar la respuesta de creación y realizar la prueba de update. (Aún no estoy seguro cómo funcionan los ids generados por graphene-django por lo que es posible que no funcionen los unittest en otro ambiente diferente al mío).
- En caso de que falle el comando para tests muy probablemente la causa sea lo que menciono en el punto anterior. El offending code sería este id:
UGVvcGxlTm9kZTo4OQ==
enapp/tests.py
- No alcancé a implementar sistemas de autenticación. Sin embargo he utilizado diferentes librebrías que abarcan varios casos de uso como:
- Django OAuth Toolkit - Para trabajar con proveedores externos.
- Simple JWT - Para trabajar con credenciales de usuarios.
- O simplemente usar BasicAuth o SessionAuth de Django.
- Con respecto a documentación especifica para GraphQL honestamente les digo que no tengo ni la menor idea de cuales son los estándares ni la forma apropiada de generar, organizar y mantener la documentación. Pero trabajo continuamente con swagger siguiendo el OpenAPI en proyectos con API Rest.
- Con respecto a "Testing avanzado" imagino que se refieren a librerías especializadas en testing como pytest, análisis de covertura de código, e implementación de CI. Podría hacer algo pero no tengo suficiente base ni experiencia en testing de GraphQL como para decidir que librería se adapta mejor ni creer que la covertura sería asertada y un CI sería overkill.