# Serializadores con Pydantic ## ¿Serializar? * Proceso de conversión de datos. * En desarrollo web: un serializador nos transforma y gestiona los datos complejos de entrada en datos nativos del lenguaje. ## Contexto Micorservicios y comunicación asertiva ![](https://i.imgur.com/RnVnX5z.jpg) **¡¡Cuestión de datos!!** ## [¿Pydantic?](https://pydantic-docs.helpmanual.io/) * Bliblioteca de python * Sirve para: * Anotaciones de tipos * Gestión de datos * (validaciones, estandares, json, etc.) * Predecesores * dataclass ```py from dataclasses import dataclass from typing import Tuple class Topping(str, Enum): mozzarella = 'mozzarella' tomato_sauce = 'tomato sauce' prosciutto = 'prosciutto' basil = 'basil' rucola = 'rucola' @dataclass class Pizza: style: str toppings: Tuple[Topping, ...] >>> Pizza(2, ("pineapple", 24)) Pizza(style=2, toppings=('pineapple', 24)) # ----------------------- # from pydantic import BaseModel class Pizza(BaseModel): style: str toppings: Tuple[Topping, ...] >>> try: Pizza(style="Napoli", toppings=(2,)) except ValidationError as err: print(err.json()) [ { "loc": [ "toppings", 0 ], "msg": "value is not a valid enumeration member; permitted: 'mozzarella', 'tomato sauce', 'prosciutto', 'basil', 'rucola'", "type": "type_error.enum", "ctx": { "enum_values": [ "mozzarella", "tomato sauce", "prosciutto", "basil", "rucola" ] } } ] ``` ### [Type annotations](https://docs.python.org/3/library/typing.html#module-contents) * [typing](https://docs.python.org/es/3/library/typing.html) * [readme](https://fastapi.tiangolo.com/es/python-types/) ### Python data types * int, str, float, list, dict, tuple, set... * [to_json](https://docs.python.org/3/library/json.html#py-to-json-table) ### ¿Dónde están los serializadores? * Todos los métodos: PUT, GET, POST, DELETE... * Todas las formas: BODY, PATH Y QUERY * Todos los momentos: REQUEST, RESPONSE ### Dinámico Serializadores dinámicos: habrán restricciones y validaciones pero en el código todos es posible. ---==`Recordatorio mental: No hay que inventarse nada, ya todo esta hecho y solo hay que implementar`== --- ## Estándares * [JSON schema](https://pydantic-docs.helpmanual.io/usage/schema/#json-schema-types) * [Openapi](https://github.com/OAI/OpenAPI-Specification) * Estándares internos ## Docs para el código * [ReStructuredText](https://docutils.sourceforge.io/rst.html) * [MarkDown](https://www.markdownguide.org/) * [Openapi to pretty](https://nordicapis.com/7-open-source-openapi-documentation-generators/) ## [Repo aquí](https://github.com/SandoDev/workshop_pydantic) ## Otros links * [good slides](http://slides.com/hultner/python-pizza-2020/) * [podcast](https://www.pythonpodcast.com/pydantic-data-validation-episode-263/) * [fastapi](https://fastapi.tiangolo.com/) * [falcon](https://falcon.readthedocs.io/en/stable/)