Skip to content

๐Ÿ› ๏ธ

๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ› ๏ธ FastAPI ๐Ÿˆธ.

"๐Ÿ› ๏ธ" ๐Ÿ”ข ๐Ÿ‘ˆ ๐Ÿ‘ท โฎ๏ธ ๐Ÿ”  ๐Ÿ“จ โญ โšซ๏ธ ๐Ÿ› ๏ธ ๐Ÿ™† ๐ŸŽฏ โžก ๐Ÿ› ๏ธ. & โฎ๏ธ ๐Ÿ”  ๐Ÿ“จ โญ ๐Ÿ›ฌ โšซ๏ธ.

  • โšซ๏ธ โœŠ ๐Ÿ”  ๐Ÿ“จ ๐Ÿ‘ˆ ๐Ÿ‘Ÿ ๐Ÿ‘† ๐Ÿˆธ.
  • โšซ๏ธ ๐Ÿ’ช โคด๏ธ ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ“จ โš–๏ธ ๐Ÿƒ ๐Ÿ™† ๐Ÿ’ช ๐Ÿ“Ÿ.
  • โคด๏ธ โšซ๏ธ ๐Ÿšถโ€โ™€๏ธ ๐Ÿ“จ ๐Ÿ› ๏ธ ๐ŸŽ‚ ๐Ÿˆธ ( โžก ๐Ÿ› ๏ธ).
  • โšซ๏ธ โคด๏ธ โœŠ ๐Ÿ“จ ๐Ÿ— ๐Ÿˆธ ( โžก ๐Ÿ› ๏ธ).
  • โšซ๏ธ ๐Ÿ’ช ๐Ÿ•ณ ๐Ÿ‘ˆ ๐Ÿ“จ โš–๏ธ ๐Ÿƒ ๐Ÿ™† ๐Ÿ’ช ๐Ÿ“Ÿ.
  • โคด๏ธ โšซ๏ธ ๐Ÿ“จ ๐Ÿ“จ.

๐Ÿ“ก โ„น

๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ”— โฎ๏ธ yield, ๐Ÿšช ๐Ÿ“Ÿ ๐Ÿ”œ ๐Ÿƒ โฎ๏ธ ๐Ÿ› ๏ธ.

๐Ÿšฅ ๐Ÿ“ค ๐Ÿ™† ๐Ÿ–ฅ ๐Ÿ“‹ (๐Ÿ“„ โช), ๐Ÿ‘ซ ๐Ÿ”œ ๐Ÿƒ โฎ๏ธ ๐ŸŒ ๐Ÿ› ๏ธ.

โœ ๐Ÿ› ๏ธ

โœ ๐Ÿ› ๏ธ ๐Ÿ‘† โš™๏ธ ๐Ÿ‘จโ€๐ŸŽจ @app.middleware("http") ๐Ÿ”› ๐Ÿ” ๐Ÿ”ข.

๐Ÿ› ๏ธ ๐Ÿ”ข ๐Ÿ“จ:

  • request.
  • ๐Ÿ”ข call_next ๐Ÿ‘ˆ ๐Ÿ”œ ๐Ÿ“จ request ๐Ÿ”ข.
    • ๐Ÿ‘‰ ๐Ÿ”ข ๐Ÿ”œ ๐Ÿšถโ€โ™€๏ธ request ๐Ÿ”— โžก ๐Ÿ› ๏ธ.
    • โคด๏ธ โšซ๏ธ ๐Ÿ“จ response ๐Ÿ— ๐Ÿ”— โžก ๐Ÿ› ๏ธ.
  • ๐Ÿ‘† ๐Ÿ’ช โคด๏ธ ๐Ÿ”€ ๐ŸŒ… response โญ ๐Ÿ›ฌ โšซ๏ธ.
import time

from fastapi import FastAPI, Request

app = FastAPI()


@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time"] = str(process_time)
    return response

Tip

โœ”๏ธ ๐Ÿคฏ ๐Ÿ‘ˆ ๐Ÿ›ƒ ยฉ ๐ŸŽš ๐Ÿ’ช ๐Ÿšฎ โš™๏ธ 'โœ–-' ๐Ÿ”ก.

โœ‹๏ธ ๐Ÿšฅ ๐Ÿ‘† โœ”๏ธ ๐Ÿ›ƒ ๐ŸŽš ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’š ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ–ฅ ๐Ÿ’ช ๐Ÿ‘€, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ‘ซ ๐Ÿ‘† โšœ ๐Ÿ“ณ (โšœ (โœ–๏ธ-๐Ÿ‡จ๐Ÿ‡ณ โ„น ๐Ÿค)) โš™๏ธ ๐Ÿ”ข expose_headers ๐Ÿ“„ ๐Ÿ’ƒ โšœ ๐Ÿฉบ.

๐Ÿ“ก โ„น

๐Ÿ‘† ๐Ÿ’ช โš™๏ธ from starlette.requests import Request.

FastAPI ๐Ÿšš โšซ๏ธ ๐Ÿช ๐Ÿ‘†, ๐Ÿ‘ฉโ€๐Ÿ’ป. โœ‹๏ธ โšซ๏ธ ๐Ÿ‘Ÿ ๐Ÿ”— โšช๏ธโžก๏ธ ๐Ÿ’ƒ.

โญ & โฎ๏ธ response

๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ“Ÿ ๐Ÿƒ โฎ๏ธ request, โญ ๐Ÿ™† โžก ๐Ÿ› ๏ธ ๐Ÿ“จ โšซ๏ธ.

& โฎ๏ธ response ๐Ÿ—, โญ ๐Ÿ›ฌ โšซ๏ธ.

๐Ÿ–ผ, ๐Ÿ‘† ๐Ÿ’ช ๐Ÿšฎ ๐Ÿ›ƒ ๐ŸŽš X-Process-Time โš— ๐Ÿ•ฐ ๐Ÿฅˆ ๐Ÿ‘ˆ โšซ๏ธ โœŠ ๐Ÿ› ๏ธ ๐Ÿ“จ & ๐Ÿ— ๐Ÿ“จ:

import time

from fastapi import FastAPI, Request

app = FastAPI()


@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time"] = str(process_time)
    return response

๐ŸŽ ๐Ÿ› ๏ธ

๐Ÿ‘† ๐Ÿ’ช โช โœ ๐ŸŒ– ๐Ÿ”ƒ ๐ŸŽ ๐Ÿ› ๏ธ ๐Ÿง ๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿฆฎ: ๐Ÿง ๐Ÿ› ๏ธ.

๐Ÿ‘† ๐Ÿ”œ โœ ๐Ÿ”ƒ โ” ๐Ÿต โšœ โฎ๏ธ ๐Ÿ› ๏ธ โญ ๐Ÿ“„.