FastAPI Asoslari: Boshlang'ichlar Uchun To'liq Qo'llanma
Muallif: Javohir Abdullayev · · Python

FastAPI Nima va Nega Aynan U?
Zamonaviy veb-dasturlashda backend API yaratish eng asosiy vazifalardan biridir. Python olamida uzoq yillar davomida Django va Flask yetakchilik qilib kelgan bo'lsa-da, so'nggi yillarda FastAPI misli ko'rilmagan tezlikda ommalashdi. FastAPI — bu Python 3.8+ tiplari (type hints) asosida qurilgan, juda tezkor, asinxron (asyncio) imkoniyatlariga ega zamonaviy veb freymvorkdir.
Uning asosiy afzalliklari:
- Yuqori tezlik: NodeJS va Go darajasidagi yuqori unumdorlik (Starlette va Pydantic asosida ishlaydi).
- Avtomatik hujjatlashtirish: Swagger UI va ReDoc orqali API hujjatlarini qo'lda yozmasdan avtomatik tayyorlaydi.
- Kuchli validatsiya: Pydantic yordamida kelayotgan ma'lumotlarni avtomatik tekshiradi va xatoliklarni aniq ko'rsatadi.
- Yozish osonligi: Kod hajmini kamaytiradi va dasturchi samaradorligini oshiradi.
1. Ishchi Muhitni Sozlash va O'rnatish
FastAPI bilan ishlashni boshlash uchun avvalo yangi virtual muhit (virtualenv) yaratamiz va kerakli kutubxonalarni o'rnatamiz. Bizga FastAPI freymvorki hamda loyihani ishga tushirish uchun uvicorn ASGI serveri kerak bo'ladi.
# Virtual muhit yaratish va faollashtirish
python -m venv venv
source venv/bin/activate # Linux / MacOS
# venv\Scripts\activate # Windows
# Kutubxonalarni o'rnatish
pip install fastapi uvicorn[standard]2. Birinchi API Endpointni Yozish
Loyiha papkasida main.py faylini yaratamiz va ilk sodda API yozamiz:
from fastapi import FastAPI
app = FastAPI(
title="Mening Birinchi API Loyiham",
description="FastAPI asoslarini o'rganish uchun qo'llanma",
version="1.0.0"
)
@app.get("/")
def root():
return {"xabar": "Salom, PyCoder.uz o'quvchilari! FastAPI ga xush kelibsiz!"}
@app.get("/salom/{ism}")
def salom_ber(ism: str):
return {"natija": f"Salom, {ism.capitalize()}! Siz muvaffaqiyatli API yaratdingiz."}
Loyihani ishga tushirish uchun terminalda quyidagi buyruqni bajaring:
uvicorn main:app --reloadBrauzerda http://127.0.0.1:8000/salom/javohir manzilini ochsangiz, JSON formatidagi javobni ko'rasiz. --reload bayrog'i kod o'zgarganda serverni avtomatik qayta ishga tushiradi.
3. Avtomatik API Hujjatlari (Interactive Docs)
FastAPI'ning eng ajoyib xususiyatlaridan biri — bu qo'shimcha plaginlarsiz tayyor bo'ladigan interaktiv hujjatlar. Server ishlayotgan vaqtda brauzerda quyidagi manzillarni ochib ko'ring:
- Swagger UI:
http://127.0.0.1:8000/docs— API endpointlarni to'g'ridan-to'g'ri brauzerdan test qilish imkoniyati. - ReDoc:
http://127.0.0.1:8000/redoc— chiroyli va qulay formatdagi texnik hujjat.
4. Path va Query Parametrlari Bilan Ishlash
API yaratishda ma'lumotlarni URL orqali ikki xil usulda qabul qilish mumkin: Path Parameters (yo'l parametrlari) va Query Parameters (so'rov parametrlari).
@app.get("/kitoblar/{kitob_id}")
def kitob_tafsiloti(kitob_id: int, sahifa: int = 1, chop_etilganmi: bool = True):
return {
"kitob_id": kitob_id,
"sahifa": sahifa,
"chop_etilganmi": chop_etilganmi,
"status": "Kitob ma'lumotlari topildi"
}
Bu yerda kitob_id majburiy butun son (int), sahifa va chop_etilganmi esa standart qiymatga ega ixtiyoriy query parametrlar hisoblanadi. Agar foydalanuvchi kitob_id o'rniga matn yuborsa, FastAPI avtomatik ravishda 422 Unprocessable Entity xatosini qaytaradi.
5. Pydantic Bilan Ma'lumotlarni Validatsiya Qilish (POST So'rovlar)
Foydalanuvchidan yangi ma'lumot qabul qilish (masalan, ro'yxatdan o'tish yoki mahsulot qo'shish) uchun HTTP POST metodidan va Pydantic modellaridan foydalanamiz.
from pydantic import BaseModel, Field
from typing import Optional
class Mahsulot(BaseModel):
nomi: str = Field(..., min_length=2, max_length=100)
narxi: float = Field(..., gt=0, description="Narx noldan katta bo'lishi shart")
mavjudmi: bool = True
tavsif: Optional[str] = None
# Soxta ma'lumotlar bazasi (xotirada)
mahsulotlar_royxati = []
@app.post("/mahsulotlar/", status_code=201)
def mahsulot_yarat(mahsulot: Mahsulot):
mahsulot_dict = mahsulot.model_dump()
mahsulot_dict["id"] = len(mahsulotlar_royxati) + 1
mahsulotlar_royxati.append(mahsulot_dict)
return {"xabar": "Mahsulot muvaffaqiyatli saqlandi", "data": mahsulot_dict}
Pydantic modeli yordamida kiritilgan har bir maydon tipi va cheklovlari (uzunlik, minimal qiymat) qat'iy tekshiriladi. Noto'g'ri ma'lumot kelsa, backend hatto xatolik kodini yozmasdan to'liq tushunarli JSON xatolik javobini beradi.
6. Kichik CRUD Loyihasini Yakunlash
Endi barcha o'rganganlarimizni birlashtirib, mahsulotlarni olish va o'chirish endpointlarini qo'shamiz:
from fastapi import HTTPException
@app.get("/mahsulotlar/")
def mahsulotlarni_olish():
return {"jami": len(mahsulotlar_royxati), "natijalar": mahsulotlar_royxati}
@app.delete("/mahsulotlar/{mahsulot_id}")
def mahsulot_ochir(mahsulot_id: int):
for index, item in enumerate(mahsulotlar_royxati):
if item["id"] == mahsulot_id:
ochirilgan = mahsulotlar_royxati.pop(index)
return {"xabar": "Mahsulot o'chirildi", "ochirilgan": ochirilgan}
raise HTTPException(status_code=404, detail="Bunday ID ga ega mahsulot topilmadi")
Boshlang'ich Dasturchilar Uchun Tavsiyalar
- Doimo Type Hinting ishlating: Python tiplari kodingizni tushunarli qiladi va FastAPI imkoniyatlarini to'liq ochib beradi.
- Swagger (/docs) dan unumli foydalaning: Postman ochmasdan API endpointlaringizni tekshirib boring.
- Asinxron funksiyalar: Agar bazaga asinxron murojaat qilsangiz,
async defdan foydalaning. Oddiy sinxron vazifalar uchundefyetarli. - Modullilikni saqlang: Loyiha kattalashganda
APIRouteryordamida endpointlarni alohida fayllarga ajrating.
Xulosa
FastAPI — bu backend olamida tezkorlik, soddalik va qulaylikni birlashtirgan ajoyib vosita. Agar siz Python-da zamonaviy REST API yozishni xohlasangiz, FastAPI eng maqbul tanlovlardan biridir. Keyingi darslarimizda ushbu API'ni PostgreSQL bazasi va SQLAlchemy ORM bilan ulashni ko'rib chiqamiz.
Teglar: #FastAPI #Python #REST API #Backend #Pydantic