jcrist / msgspec

A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML
https://jcristharif.com/msgspec/
BSD 3-Clause "New" or "Revised" License
2.01k stars 59 forks source link

Generate FastAPI docs from msgspec.Struct json schema #661

Open Arseniy-Popov opened 3 months ago

Arseniy-Popov commented 3 months ago

Question

One can generate a json schema from a msgspec.Struct using msgspec.json.schema. Where does one put that schema so that FastAPI uses it as the schema for the endpoint's response body in the OpenAPI docs that it generates?

There doesn't seem to be a way to achive this in FastAPI despite some schema customization options. Nor is it possible to generate a pydantic model (so that it could be used for the docs) from a json schema.

Although the question relates to FastAPI rather than to msgspec directly I'm still posting it here as using Structs with FastAPI is probably a very common use-case.

provinzkraut commented 3 months ago

The answer here is, unfortunately, that FastAPI simply does not support this for types that are not natively supported by Pydantic. There's not much that can be done from msgspec's side here, as it's a design decision/constraint on FastAPI's side.

kemingy commented 3 months ago

I'm also using msgspec in a micro-service to validate the requests and generate the OpenAPI doc. I build a simple tool defspec to generate the OpenAPI schema and render it with Swagger/Redoc/Scalar.