NOTA: Para ejecutar nuestra API en local, tenemos que usar el siguiente comando
uvicorn main:app --reload
- Creando nuestro entorno virtual
python3 -m venv venv
- Activando nuestro entorno virtual
source venv/bin/activate
pip install fastapi uvicorn
- Creando un requirements.txt
pip freeze > requirements.txt
- Para instalar los paquetes de requirements.txt ejecutar este comando
pip install -r requirements.txt
- Enum
- HttpUrl
- FilePath
- DirectoryPath
- EmailStr
pip install pydantic[email]
- PaymentCardNumber
- IpvAnyAdress
- NegativeFloat
- PositiveFloat
- NegativeInt
- PositiveInt
Puedes encontrar mas tipos de datos en Pydantic Field Types
Tipos de entrada de datos | Descripción |
---|---|
Path Parameters | Son esos parametros obligatorios que se mandan mediante la url |
Query Parameters | Son los parametros opcionales que pasamos mediante la url |
Request Body | Son los archivos en formato JSON que nos envia un cliente a nuestra API |
Formularios | Son aquellos campos que tenemos en los formularios del frontend de una aplicacion que nos trae esos datos (mediante este metodo) a nuestra API |
Headers | Son cabeceras HTTP que pueden venir de cliente a servidor y viceversa |
Cookies | Son pequeños bloques de codigo y/o de datos que un servidor instala en nuestra computadora para poder trackear nuestra informacion a través de la web |
Files | Es la entrada de datos que se refiere a los archivos dentro de FastAPI (Imagenes, Videos, etc), este tipo de entrada depende de dos clases (File y UploadFile) |
# 127.0.0.1:8000/person/detail/25
@app.get("/person/detail/{person_id}")
def show_person(person_id:int = Path(...)):
return {person_id: "it exists!"}
# 127.0.0.1:8000/person/detail?name=John&age=12
@app.get("/person/detail")
def show_person(
name:Optional[str] = Query(None), #opcional
age:int = Query(...) #obligatorio
):
return {name:age}
# 127.0.0.1:8000/person/25
@app.put("/person/{person_id}")
def update_person(
person_id:int = Path(...),
person:Person = Body(...),
Location:Location = Body(...)
):
results = person.dict()
results.update(Location.dict())
return results
Para trabajar con formularios se tiene que descargar el siguiente paquete:
pip install python-multipart
# Ejemplo usando la entrada de dato tipo Formulario
@app.post(
path="/login",
response_model=LoginOut,
status_code=status.HTTP_200_OK
)
def login(username:str = Form(...), password:str = Form(...)):
return LoginOut(username=username)
# Trabajando con Cookies y Headers Parameters
@app.post(
path="/contact",
status_code=status.HTTP_200_OK
)
def contact(
first_name:str = Form(...),
last_name:str = Form(...),
email:EmailStr = Form(...),
message:str = Form(...),
user_agent:Optional[str] = Header(default=None),
ads:Optional[str] = Cookie(default=None)
):
return user_agent
@app.post("/post-image")
def post_image(image:UploadFile = File(...)):
return {
"Filename": image.filename,
"Format": image.content_type,
"Size(kb)": round(len(image.file.read())/1024, ndigits=2),
}