شما میتوانید میانافزارها را در FastAPI اضافه کنید.
"میانافزار" یک تابع است که با هر درخواست(request) قبل از پردازش توسط هر path operation (عملیات مسیر) خاص کار میکند. همچنین با هر پاسخ(response) قبل از بازگشت آن نیز کار میکند.
هر درخواستی (request) که به برنامه شما می آید را می گیرد.
سپس می تواند کاری برای آن درخواست انجام دهید یا هر کد مورد نیازتان را اجرا کنید.
سپس درخواست را به بخش دیگری از برنامه (توسط یک path operation مشخص) برای پردازش ارسال می کند.
سپس پاسخ تولید شده توسط برنامه را (توسط یک path operation مشخص) دریافت میکند.
می تواند کاری با پاسخ انجام دهید یا هر کد مورد نیازتان را اجرا کند.
سپس پاسخ را برمی گرداند.
جزئیات فنی
در صورت وجود وابستگی هایی با yield، کد خروجی پس از اجرای میانافزار اجرا خواهد شد.
در صورت وجود هر گونه وظایف پس زمینه (که در ادامه توضیح داده میشوند)، تمام میانافزارها پس از آن اجرا خواهند شد.
برای ایجاد یک میانافزار، از دکوریتور @app.middleware("http") در بالای یک تابع استفاده میشود.
تابع میان افزار دریافت می کند:
* درخواست
* تابع call_next که درخواست را به عنوان پارامتر دریافت می کند
* این تابع درخواست را به path operation مربوطه ارسال می کند.
* سپس پاسخ تولید شده توسط path operation مربوطه را برمیگرداند.
* شما میتوانید سپس پاسخ را تغییر داده و پس از آن را برگردانید.
!!! نکته به خاطر داشته باشید که هدرهای اختصاصی سفارشی را می توان با استفاده از پیشوند "X-" اضافه کرد.
اما اگر هدرهای سفارشی دارید که میخواهید مرورگر کاربر بتواند آنها را ببیند، باید آنها را با استفاده از پارامتر `expose_headers` که در مستندات <a href="https://www.starlette.io/middleware/#corsmiddleware" class="external-link" target="_blank">CORS از Starlette</a> توضیح داده شده است، به پیکربندی CORS خود اضافه کنید.
جزئیات فنی
شما همچنین میتوانید از from starlette.requests import Request استفاده کنید.
FastAPI این را به عنوان یک سهولت برای شما به عنوان برنامهنویس فراهم میکند. اما این مستقیما از Starlette به دست میآید.