mirror of https://github.com/tiangolo/fastapi.git
110 lines
3.6 KiB
Markdown
110 lines
3.6 KiB
Markdown
# 🛃 📨 & APIRoute 🎓
|
||
|
||
💼, 👆 5️⃣📆 💚 🔐 ⚛ ⚙️ `Request` & `APIRoute` 🎓.
|
||
|
||
🎯, 👉 5️⃣📆 👍 🎛 ⚛ 🛠️.
|
||
|
||
🖼, 🚥 👆 💚 ✍ ⚖️ 🔬 📨 💪 ⏭ ⚫️ 🛠️ 👆 🈸.
|
||
|
||
!!! danger
|
||
👉 "🏧" ⚒.
|
||
|
||
🚥 👆 ▶️ ⏮️ **FastAPI** 👆 💪 💚 🚶 👉 📄.
|
||
|
||
## ⚙️ 💼
|
||
|
||
⚙️ 💼 🔌:
|
||
|
||
* 🏭 🚫-🎻 📨 💪 🎻 (✅ <a href="https://msgpack.org/index.html" class="external-link" target="_blank">`msgpack`</a>).
|
||
* 🗜 🗜-🗜 📨 💪.
|
||
* 🔁 🚨 🌐 📨 💪.
|
||
|
||
## 🚚 🛃 📨 💪 🔢
|
||
|
||
➡️ 👀 ❔ ⚒ ⚙️ 🛃 `Request` 🏿 🗜 🗜 📨.
|
||
|
||
& `APIRoute` 🏿 ⚙️ 👈 🛃 📨 🎓.
|
||
|
||
### ✍ 🛃 `GzipRequest` 🎓
|
||
|
||
!!! tip
|
||
👉 🧸 🖼 🎦 ❔ ⚫️ 👷, 🚥 👆 💪 🗜 🐕🦺, 👆 💪 ⚙️ 🚚 [`GzipMiddleware`](./middleware.md#gzipmiddleware){.internal-link target=_blank}.
|
||
|
||
🥇, 👥 ✍ `GzipRequest` 🎓, ❔ 🔜 📁 `Request.body()` 👩🔬 🗜 💪 🔍 ☑ 🎚.
|
||
|
||
🚥 📤 🙅♂ `gzip` 🎚, ⚫️ 🔜 🚫 🔄 🗜 💪.
|
||
|
||
👈 🌌, 🎏 🛣 🎓 💪 🍵 🗜 🗜 ⚖️ 🗜 📨.
|
||
|
||
```Python hl_lines="8-15"
|
||
{!../../../docs_src/custom_request_and_route/tutorial001.py!}
|
||
```
|
||
|
||
### ✍ 🛃 `GzipRoute` 🎓
|
||
|
||
⏭, 👥 ✍ 🛃 🏿 `fastapi.routing.APIRoute` 👈 🔜 ⚒ ⚙️ `GzipRequest`.
|
||
|
||
👉 🕰, ⚫️ 🔜 📁 👩🔬 `APIRoute.get_route_handler()`.
|
||
|
||
👉 👩🔬 📨 🔢. & 👈 🔢 ⚫️❔ 🔜 📨 📨 & 📨 📨.
|
||
|
||
📥 👥 ⚙️ ⚫️ ✍ `GzipRequest` ⚪️➡️ ⏮️ 📨.
|
||
|
||
```Python hl_lines="18-26"
|
||
{!../../../docs_src/custom_request_and_route/tutorial001.py!}
|
||
```
|
||
|
||
!!! note "📡 ℹ"
|
||
`Request` ✔️ `request.scope` 🔢, 👈 🐍 `dict` ⚗ 🗃 🔗 📨.
|
||
|
||
`Request` ✔️ `request.receive`, 👈 🔢 "📨" 💪 📨.
|
||
|
||
`scope` `dict` & `receive` 🔢 👯♂️ 🍕 🔫 🔧.
|
||
|
||
& 👈 2️⃣ 👜, `scope` & `receive`, ⚫️❔ 💪 ✍ 🆕 `Request` 👐.
|
||
|
||
💡 🌅 🔃 `Request` ✅ <a href="https://www.starlette.io/requests/" class="external-link" target="_blank">💃 🩺 🔃 📨</a>.
|
||
|
||
🕴 👜 🔢 📨 `GzipRequest.get_route_handler` 🔨 🎏 🗜 `Request` `GzipRequest`.
|
||
|
||
🔨 👉, 👆 `GzipRequest` 🔜 ✊ 💅 🗜 📊 (🚥 💪) ⏭ 🚶♀️ ⚫️ 👆 *➡ 🛠️*.
|
||
|
||
⏮️ 👈, 🌐 🏭 ⚛ 🎏.
|
||
|
||
✋️ ↩️ 👆 🔀 `GzipRequest.body`, 📨 💪 🔜 🔁 🗜 🕐❔ ⚫️ 📐 **FastAPI** 🕐❔ 💪.
|
||
|
||
## 🔐 📨 💪 ⚠ 🐕🦺
|
||
|
||
!!! tip
|
||
❎ 👉 🎏 ⚠, ⚫️ 🎲 📚 ⏩ ⚙️ `body` 🛃 🐕🦺 `RequestValidationError` ([🚚 ❌](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}).
|
||
|
||
✋️ 👉 🖼 ☑ & ⚫️ 🎦 ❔ 🔗 ⏮️ 🔗 🦲.
|
||
|
||
👥 💪 ⚙️ 👉 🎏 🎯 🔐 📨 💪 ⚠ 🐕🦺.
|
||
|
||
🌐 👥 💪 🍵 📨 🔘 `try`/`except` 🍫:
|
||
|
||
```Python hl_lines="13 15"
|
||
{!../../../docs_src/custom_request_and_route/tutorial002.py!}
|
||
```
|
||
|
||
🚥 ⚠ 📉, `Request` 👐 🔜 ↔, 👥 💪 ✍ & ⚒ ⚙️ 📨 💪 🕐❔ 🚚 ❌:
|
||
|
||
```Python hl_lines="16-18"
|
||
{!../../../docs_src/custom_request_and_route/tutorial002.py!}
|
||
```
|
||
|
||
## 🛃 `APIRoute` 🎓 📻
|
||
|
||
👆 💪 ⚒ `route_class` 🔢 `APIRouter`:
|
||
|
||
```Python hl_lines="26"
|
||
{!../../../docs_src/custom_request_and_route/tutorial003.py!}
|
||
```
|
||
|
||
👉 🖼, *➡ 🛠️* 🔽 `router` 🔜 ⚙️ 🛃 `TimedRoute` 🎓, & 🔜 ✔️ ➕ `X-Response-Time` 🎚 📨 ⏮️ 🕰 ⚫️ ✊ 🏗 📨:
|
||
|
||
```Python hl_lines="13-20"
|
||
{!../../../docs_src/custom_request_and_route/tutorial003.py!}
|
||
```
|