diff --git a/docs/en/mkdocs.yml b/docs/en/mkdocs.yml index 1dac0fde4..abbe25450 100644 --- a/docs/en/mkdocs.yml +++ b/docs/en/mkdocs.yml @@ -22,6 +22,7 @@ nav: - Languages: - en: / - es: /es/ + - ja: /ja/ - pt: /pt/ - zh: /zh/ - features.md diff --git a/docs/es/mkdocs.yml b/docs/es/mkdocs.yml index 1d4210530..e87262b69 100644 --- a/docs/es/mkdocs.yml +++ b/docs/es/mkdocs.yml @@ -22,6 +22,7 @@ nav: - Languages: - en: / - es: /es/ + - ja: /ja/ - pt: /pt/ - zh: /zh/ - features.md diff --git a/docs/ja/docs/index.md b/docs/ja/docs/index.md new file mode 100644 index 000000000..3dfc0c652 --- /dev/null +++ b/docs/ja/docs/index.md @@ -0,0 +1,445 @@ +{!../../../docs/missing-translation.md!} + +

+ FastAPI +

+

+ FastAPI framework, high performance, easy to learn, fast to code, ready for production +

+

+ + Build Status + + + Coverage + + + Package version + + + Join the chat at https://gitter.im/tiangolo/fastapi + +

+ +--- + +**ドキュメント**: https://fastapi.tiangolo.com + +**ソースコード**: https://github.com/tiangolo/fastapi + +--- + +FastAPI は、モダンで、速い(高いパフォーマンスな)、標準の Python 型ヒントに基づいて、Python 3.6 以降のバージョンで API をビルドするための Web フレームワークです。 + +主な特徴: + +- **高速**: **NodeJS** や **Go** 並みのとても高いパフォーマンス (Starlette と Pydantic のおかげです)。 [最も高速な Python フレームワークの一つです](#performance). + +- **高速なコーディング**: 開発速度を約 200%~300%向上させます。 \* +- **少ないバグ**: 開発者起因のヒューマンエラーを約 40%削減します。 \* +- **直感的**: 素晴らしいエディタのサポートや オートコンプリート。 デバッグ時間を削減します。 +- **簡単**: 簡単に利用、習得できるようにデザインされています。ドキュメントを読む時間を削減します。 +- **短い**: コードの重複を最小限にしています。各パラメータからの複数の機能。少ないバグ。 +- **堅牢性**: 自動対話ドキュメントを使用して、本番環境で使用できるコードを取得します。 +- **Standards-based**: API のオープンスタンダードに基づいており、完全に互換性があります: OpenAPI (以前は Swagger として知られていました) や JSON スキーマ. + +\* 社内開発チームでのテストに基づき見積もってから、本番アプリケーションの構築します。 + +## Opinions + +"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" + +
Kabir Khan - Microsoft (ref)
+ +--- + +"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_" + +
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
+ +--- + +"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_" + +
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
+ +--- + +"_I’m over the moon excited about **FastAPI**. It’s so fun!_" + +
Brian Okken - Python Bytes podcast host (ref)
+ +--- + +"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._" + +
Timothy Crosley - Hug creator (ref)
+ +--- + +"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_" + +"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_" + +
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
+ +--- + +## **Typer**, the FastAPI of CLIs + + + +If you are building a CLI app to be used in the terminal instead of a web API, check out **Typer**. + +**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀 + +## Requirements + +Python 3.6+ + +FastAPI stands on the shoulders of giants: + +- Starlette for the web parts. +- Pydantic for the data parts. + +## Installation + +
+ +```console +$ pip install fastapi + +---> 100% +``` + +
+ +You will also need an ASGI server, for production such as Uvicorn or Hypercorn. + +
+ +```console +$ pip install uvicorn + +---> 100% +``` + +
+ +## Example + +### Create it + +- Create a file `main.py` with: + +```Python +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: str = None): + return {"item_id": item_id, "q": q} +``` + +
+Or use async def... + +If your code uses `async` / `await`, use `async def`: + +```Python hl_lines="7 12" +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +async def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +async def read_item(item_id: int, q: str = None): + return {"item_id": item_id, "q": q} +``` + +**Note**: + +If you don't know, check the _"In a hurry?"_ section about `async` and `await` in the docs. + +
+ +### Run it + +Run the server with: + +
+ +```console +$ uvicorn main:app --reload + +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +INFO: Started reloader process [28720] +INFO: Started server process [28722] +INFO: Waiting for application startup. +INFO: Application startup complete. +``` + +
+ +
+About the command uvicorn main:app --reload... + +The command `uvicorn main:app` refers to: + +- `main`: the file `main.py` (the Python "module"). +- `app`: the object created inside of `main.py` with the line `app = FastAPI()`. +- `--reload`: make the server restart after code changes. Only do this for development. + +
+ +### Check it + +Open your browser at http://127.0.0.1:8000/items/5?q=somequery. + +You will see the JSON response as: + +```JSON +{"item_id": 5, "q": "somequery"} +``` + +You already created an API that: + +- Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`. +- Both _paths_ take `GET` operations (also known as HTTP _methods_). +- The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`. +- The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`. + +### Interactive API docs + +Now go to http://127.0.0.1:8000/docs. + +You will see the automatic interactive API documentation (provided by Swagger UI): + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) + +### Alternative API docs + +And now, go to http://127.0.0.1:8000/redoc. + +You will see the alternative automatic documentation (provided by ReDoc): + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) + +## Example upgrade + +Now modify the file `main.py` to receive a body from a `PUT` request. + +Declare the body using standard Python types, thanks to Pydantic. + +```Python hl_lines="2 7 8 9 10 23 24 25" +from fastapi import FastAPI +from pydantic import BaseModel + +app = FastAPI() + + +class Item(BaseModel): + name: str + price: float + is_offer: bool = None + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: str = None): + return {"item_id": item_id, "q": q} + + +@app.put("/items/{item_id}") +def update_item(item_id: int, item: Item): + return {"item_name": item.name, "item_id": item_id} +``` + +The server should reload automatically (because you added `--reload` to the `uvicorn` command above). + +### Interactive API docs upgrade + +Now go to http://127.0.0.1:8000/docs. + +- The interactive API documentation will be automatically updated, including the new body: + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) + +- Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API: + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) + +- Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen: + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) + +### Alternative API docs upgrade + +And now, go to http://127.0.0.1:8000/redoc. + +- The alternative documentation will also reflect the new query parameter and body: + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) + +### Recap + +In summary, you declare **once** the types of parameters, body, etc. as function parameters. + +You do that with standard modern Python types. + +You don't have to learn a new syntax, the methods or classes of a specific library, etc. + +Just standard **Python 3.6+**. + +For example, for an `int`: + +```Python +item_id: int +``` + +or for a more complex `Item` model: + +```Python +item: Item +``` + +...and with that single declaration you get: + +- Editor support, including: + - Completion. + - Type checks. +- Validation of data: + - Automatic and clear errors when the data is invalid. + - Validation even for deeply nested JSON objects. +- Conversion of input data: coming from the network to Python data and types. Reading from: + - JSON. + - Path parameters. + - Query parameters. + - Cookies. + - Headers. + - Forms. + - Files. +- Conversion of output data: converting from Python data and types to network data (as JSON): + - Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc). + - `datetime` objects. + - `UUID` objects. + - Database models. + - ...and many more. +- Automatic interactive API documentation, including 2 alternative user interfaces: + - Swagger UI. + - ReDoc. + +--- + +Coming back to the previous code example, **FastAPI** will: + +- Validate that there is an `item_id` in the path for `GET` and `PUT` requests. +- Validate that the `item_id` is of type `int` for `GET` and `PUT` requests. + - If it is not, the client will see a useful, clear error. +- Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests. + - As the `q` parameter is declared with `= None`, it is optional. + - Without the `None` it would be required (as is the body in the case with `PUT`). +- For `PUT` requests to `/items/{item_id}`, Read the body as JSON: + - Check that it has a required attribute `name` that should be a `str`. + - Check that it has a required attribute `price` that has to be a `float`. + - Check that it has an optional attribute `is_offer`, that should be a `bool`, if present. + - All this would also work for deeply nested JSON objects. +- Convert from and to JSON automatically. +- Document everything with OpenAPI, that can be used by: + - Interactive documentation systems. + - Automatic client code generation systems, for many languages. +- Provide 2 interactive documentation web interfaces directly. + +--- + +We just scratched the surface, but you already get the idea of how it all works. + +Try changing the line with: + +```Python + return {"item_name": item.name, "item_id": item_id} +``` + +...from: + +```Python + ... "item_name": item.name ... +``` + +...to: + +```Python + ... "item_price": item.price ... +``` + +...and see how your editor will auto-complete the attributes and know their types: + +![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) + +For a more complete example including more features, see the Tutorial - User Guide. + +**Spoiler alert**: the tutorial - user guide includes: + +- Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**. +- How to set **validation constraints** as `maximum_length` or `regex`. +- A very powerful and easy to use **Dependency Injection** system. +- Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth. +- More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic). +- Many extra features (thanks to Starlette) as: + - **WebSockets** + - **GraphQL** + - extremely easy tests based on `requests` and `pytest` + - **CORS** + - **Cookie Sessions** + - ...and more. + +## Performance + +Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as one of the fastest Python frameworks available, only below Starlette and Uvicorn themselves (used internally by FastAPI). (\*) + +To understand more about it, see the section Benchmarks. + +## Optional Dependencies + +Used by Pydantic: + +- ujson - for faster JSON "parsing". +- email_validator - for email validation. + +Used by Starlette: + +- requests - Required if you want to use the `TestClient`. +- aiofiles - Required if you want to use `FileResponse` or `StaticFiles`. +- jinja2 - Required if you want to use the default template configuration. +- python-multipart - Required if you want to support form "parsing", with `request.form()`. +- itsdangerous - Required for `SessionMiddleware` support. +- pyyaml - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI). +- graphene - Required for `GraphQLApp` support. +- ujson - Required if you want to use `UJSONResponse`. + +Used by FastAPI / Starlette: + +- uvicorn - for the server that loads and serves your application. +- orjson - Required if you want to use `ORJSONResponse`. + +You can install all of these with `pip install fastapi[all]`. + +## License + +This project is licensed under the terms of the MIT license. diff --git a/docs/ja/mkdocs.yml b/docs/ja/mkdocs.yml new file mode 100644 index 000000000..8f55ea67c --- /dev/null +++ b/docs/ja/mkdocs.yml @@ -0,0 +1,66 @@ +site_name: FastAPI +site_description: FastAPI framework, high performance, easy to learn, fast to code, ready for production +site_url: https://fastapi.tiangolo.com/ja/ +theme: + name: material + palette: + primary: teal + accent: amber + icon: + repo: fontawesome/brands/github-alt + logo: https://fastapi.tiangolo.com/img/icon-white.svg + favicon: https://fastapi.tiangolo.com/img/favicon.png + language: ja +repo_name: tiangolo/fastapi +repo_url: https://github.com/tiangolo/fastapi +edit_uri: '' +google_analytics: +- UA-133183413-1 +- auto +nav: +- FastAPI: index.md +- Languages: + - en: / + - es: /es/ + - ja: /ja/ + - pt: /pt/ + - zh: /zh/ +markdown_extensions: +- toc: + permalink: true +- markdown.extensions.codehilite: + guess_lang: false +- markdown_include.include: + base_path: docs +- admonition +- codehilite +- extra +- pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_div_format '' +- pymdownx.tabbed +extra: + social: + - icon: fontawesome/brands/github-alt + link: https://github.com/tiangolo/typer + - icon: fontawesome/brands/twitter + link: https://twitter.com/tiangolo + - icon: fontawesome/brands/linkedin + link: https://www.linkedin.com/in/tiangolo + - icon: fontawesome/brands/dev + link: https://dev.to/tiangolo + - icon: fontawesome/brands/medium + link: https://medium.com/@tiangolo + - icon: fontawesome/solid/globe + link: https://tiangolo.com +extra_css: +- https://fastapi.tiangolo.com/css/termynal.css +- https://fastapi.tiangolo.com/css/custom.css +extra_javascript: +- https://unpkg.com/mermaid@8.4.6/dist/mermaid.min.js +- https://fastapi.tiangolo.com/js/termynal.js +- https://fastapi.tiangolo.com/js/custom.js +- https://fastapi.tiangolo.com/js/chat.js +- https://sidecar.gitter.im/dist/sidecar.v1.js diff --git a/docs/pt/mkdocs.yml b/docs/pt/mkdocs.yml index 105f7e6f3..d54ac1c9d 100644 --- a/docs/pt/mkdocs.yml +++ b/docs/pt/mkdocs.yml @@ -22,6 +22,7 @@ nav: - Languages: - en: / - es: /es/ + - ja: /ja/ - pt: /pt/ - zh: /zh/ - features.md diff --git a/docs/zh/mkdocs.yml b/docs/zh/mkdocs.yml index 75a7e9707..26b7433c4 100644 --- a/docs/zh/mkdocs.yml +++ b/docs/zh/mkdocs.yml @@ -22,6 +22,7 @@ nav: - Languages: - en: / - es: /es/ + - ja: /ja/ - pt: /pt/ - zh: /zh/ - features.md