FastAPI framework, high performance, easy to learn, fast to code, ready for production
BackgroundTasks
, refactor docs structure. PR #10392 by @tiangolo. New docs at FastAPI Reference - Code API.docs/uk/docs/tutorial/extra-data-types.md
. PR #10132 by @ArtemKhymenko.docs/fr/docs/advanced/path-operation-advanced-configuration.md
, docs/fr/docs/alternatives.md
, docs/fr/docs/async.md
, docs/fr/docs/features.md
, docs/fr/docs/help-fastapi.md
, docs/fr/docs/index.md
, docs/fr/docs/python-types.md
, docs/fr/docs/tutorial/body.md
, docs/fr/docs/tutorial/first-steps.md
, docs/fr/docs/tutorial/query-params.md
. PR #10154 by @s-rigaud.docs/zh/docs/async.md
. PR #5591 by @mkdir700.docs/tutorial/security/simple-oauth2.md
. PR #3844 by @jaystone776.docs/ko/docs/deployment/cloud.md
. PR #10191 by @Sion99.docs/ja/docs/deployment/https.md
. PR #10298 by @tamtam-fitness.docs/ru/docs/tutorial/body-fields.md
. PR #10224 by @AlertRED.docs/pl/docs/help-fastapi.md
. PR #10121 by @romabozhanovgithub.docs/ru/docs/tutorial/header-params.md
. PR #10226 by @AlertRED.docs/zh/docs/deployment/versions.md
. PR #10276 by @xzmeng.regex
to pattern
. PR #10085 by @pablodorrio.docs/en/docs/deployment/server-workers.md
. PR #10066 by @tamtam-fitness.docs/en/docs/tutorial/extra-data-types.md
. PR #10155 by @hasnatsajid.docs/en/docs/tutorial/handling-errors.md
. PR #10170 by @poupapaa.docs/en/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
. PR #10172 by @ragul-kachiappan.docs/pt/docs/tutorial/path-params.md
. PR #10126 by @LecoOliveira.docs/yo/docs/index.md
. PR #10033 by @AfolabiOlaoluwa.docs/uk/docs/python-types.md
. PR #10080 by @rostik1410.docs/vi/docs/tutorial/first-steps.md
and docs/vi/docs/tutorial/index.md
. PR #10088 by @magiskboy.docs/uk/docs/alternatives.md
. PR #10060 by @whysage.docs/uk/docs/tutorial/index.md
. PR #10079 by @rostik1410.docs/en/docs/how-to/separate-openapi-schemas.md
and docs/en/docs/tutorial/schema-extra-example.md
. PR #10189 by @xzmeng.docs/zh/docs/advanced/generate-clients.md
. PR #9883 by @funny-cat-happy.fastapi/applications.py
. PR #10045 by @AhsanSheraz.openapi_examples
in all FastAPI parameters. PR #10152 by @tiangolo.
separate_input_output_schemas=False
. PR #10145 by @tiangolo.
ResponseValidationError
printable details, to show up in server error logs. PR #10078 by @tiangolo.fastapi/params.py
. PR #9854 by @russbiggs.fastapi/concurrency.py
and fastapi/routing.py
. PR #9590 by @ElliottLarsen.docs/en/docs/contributing.md
. PR #9878 by @VicenteMerino.docs/en/docs/tutorial/bigger-applications.md
. PR #9806 by @theonlykingpin.docs/ja/docs/deployment/concepts.md
. PR #10062 by @tamtam-fitness.docs/ja/docs/deployment/server-workers.md
. PR #10064 by @tamtam-fitness.docs/ja/docs/deployment/docker.md
. PR #10073 by @tamtam-fitness.docs/uk/docs/fastapi-people.md
. PR #10059 by @rostik1410.docs/uk/docs/tutorial/cookie-params.md
. PR #10032 by @rostik1410.docs/ru/docs/deployment/docker.md
. PR #9971 by @Xewus.docs/vi/docs/python-types.md
. PR #10047 by @magiskboy.docs/ru/docs/tutorial/dependencies/global-dependencies.md
. PR #9970 by @dudyaosuplayer.docs/ur/docs/benchmarks.md
. PR #9974 by @AhsanSheraz.computed_field
, better OpenAPI for response models, proper required attributes, better generated clients. PR #10011 by @tiangolo.jsonable_encoder
. PR #9840 by @iudeen.docs/ru/docs/tutorial/security/index.md
. PR #9963 by @eVery1337.MultHostUrl
to AnyUrl
for compatibility with older versions of Pydantic v1. PR #9852 by @Kludex.docs/uk/docs/tutorial/body.md
. PR #4574 by @ss-o-furda.docs/vi/docs/features.md
and docs/vi/docs/index.md
. PR #3006 by @magiskboy.docs/ko/docs/async.md
. PR #4179 by @NinaHwang.docs/zh/docs/tutorial/background-tasks.md
. PR #9812 by @wdh99.docs/fr/docs/tutorial/query-params-str-validations.md
. PR #4075 by @Smlep.docs/fr/docs/tutorial/index.md
. PR #2234 by @JulianMaurin.docs/fr/docs/contributing.md
. PR #2132 by @JulianMaurin.docs/fr/docs/benchmarks.md
. PR #2155 by @clemsau.docs/ru/docs/tutorial/request-forms.md
. PR #9841 by @dedkot01.docs/zh/docs/tutorial/handling-errors.md
. PR #9485 by @Creat55.✨ Support for Pydantic v2 ✨
Pydantic version 2 has the core re-written in Rust and includes a lot of improvements and features, for example:
...all this while keeping the same Python API. In most of the cases, for simple models, you can simply upgrade the Pydantic version and get all the benefits. 🚀
In some cases, for pure data validation and processing, you can get performance improvements of 20x or more. This means 2,000% or more. 🤯
When you use FastAPI, there's a lot more going on, processing the request and response, handling dependencies, executing your own code, and particularly, waiting for the network. But you will probably still get some nice performance improvements just from the upgrade.
The focus of this release is compatibility with Pydantic v1 and v2, to make sure your current apps keep working. Later there will be more focus on refactors, correctness, code improvements, and then performance improvements. Some third-party early beta testers that ran benchmarks on the beta releases of FastAPI reported improvements of 2x - 3x. Which is not bad for just doing pip install --upgrade fastapi pydantic
. This was not an official benchmark and I didn't check it myself, but it's a good sign.
Check out the Pydantic migration guide.
For the things that need changes in your Pydantic models, the Pydantic team built bump-pydantic
.
A command line tool that will process your code and update most of the things automatically for you. Make sure you have your code in git first, and review each of the changes to make sure everything is correct before committing the changes.
This version of FastAPI still supports Pydantic v1. And although Pydantic v1 will be deprecated at some point, ti will still be supported for a while.
This means that you can install the new Pydantic v2, and if something fails, you can install Pydantic v1 while you fix any problems you might have, but having the latest FastAPI.
There are tests for both Pydantic v1 and v2, and test coverage is kept at 100%.
There are new parameter fields supported by Pydantic Field()
for:
Path()
Query()
Header()
Cookie()
Body()
Form()
File()
The new parameter fields are:
default_factory
alias_priority
validation_alias
serialization_alias
discriminator
strict
multiple_of
allow_inf_nan
max_digits
decimal_places
json_schema_extra
...you can read about them in the Pydantic docs.
The parameter regex
has been deprecated and replaced by pattern
.
New Pydantic models use an improved and simplified attribute model_config
that takes a simple dict instead of an internal class Config
for their configuration.
The attribute schema_extra
for the internal class Config
has been replaced by the key json_schema_extra
in the new model_config
dict.
When you install "fastapi[all]"
it now also includes:
pydantic-settings
- for settings management.pydantic-extra-types
- for extra types to be used with Pydantic.Now Pydantic Settings is an additional optional package (included in "fastapi[all]"
). To use settings you should now import from pydantic_settings import BaseSettings
instead of importing from pydantic
directly.
PR #9816 by @tiangolo, included all the work done (in multiple PRs) on the beta branch (main-pv2
).
Install with:
pip install --pre --upgrade fastapi pydantic
✨ Beta support for Pydantic version 2 and OpenAPI 3.1.0 ✨
This is probably the last beta before the final release, probably in one or two days. So, please, test it out! 🤓 🚀 (before it's too late 😅).
The same details as in the previous beta releases below.
This has many features:
Check out the Pydantic migration guide: https://docs.pydantic.dev/dev-v2/migration/
This version of FastAPI still supports Pydantic v1.
This means that you can install the new Pydantic v2, and if something fails, you can install Pydantic v1 while you fix any problems you might have, but having the latest FastAPI.
The focus of this release is compatibility with Pydantic v1 and v2, to make sure your current apps keep working. Later there will be more focus on refactors and code improvements, and then performance improvements. Although you will probably get nice performance improvements already.
There are tests for both Pydantic v1 and v2, and test coverage is kept at 100%.
You will probably still want to test this version in your code even if you don't plan to migrate to Pydantic v2 yet, to ensure that the changes of FastAPI don't break your app in any way.
If you install the beta, please let me know if everything is working or if you are having issues in this discussion: https://github.com/tiangolo/fastapi/discussions/9709