Memahami Asas FastAPI: Panduan untuk FastAPI, Uvicorn, Starlette, Swagger UI dan Pydantic

Barbara Streisand
Lepaskan: 2024-11-03 22:01:03
asal
596 orang telah melayarinya

Understanding FastAPI Fundamentals: A Guide to FastAPI, Uvicorn, Starlette, Swagger UI, and Pydantic

FastAPI ialah rangka kerja web moden berprestasi tinggi untuk membina API dengan Python, membolehkan pembangun mencipta aplikasi yang berkuasa dan cekap dengan usaha yang minimum. Ia direka bentuk dengan mengambil kira pengaturcaraan tak segerak, menjadikannya sangat pantas dan mampu mengendalikan berbilang permintaan serentak. Komponen utama yang menggerakkan FastAPI termasuk Uvicorn, Starlette, Swagger UI dan Pydantic. Dalam panduan ini, kami akan meneroka setiap komponen ini dan melihat cara ia digabungkan dalam FastAPI, dengan contoh kod untuk menunjukkan konsep utama.


1. Teras FastAPI

FastAPI dibina di atas dua asas utama:

  • Pengaturcaraan Asynchronous: Memanfaatkan async Python dan menunggu, FastAPI boleh mengendalikan banyak permintaan pada masa yang sama, menjadikannya cekap untuk aplikasi yang memerlukan keselarasan.
  • Anotasi Jenis: FastAPI menggunakan pembayang jenis Python untuk mengesahkan dan mensiri data permintaan dan respons secara automatik, yang menjadikan pembangunan lebih pantas dan selamat.

Mari mulakan dengan apl FastAPI yang mudah untuk mendapatkan idea tentang strukturnya:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ini ialah aplikasi FastAPI asas dengan satu laluan (/) yang mengembalikan respons JSON dengan {"Hello": "World"}.

Untuk menjalankan apl ini, anda akan menggunakan Uvicorn, pelayan ASGI yang direka untuk menyediakan aplikasi web tak segerak.


2. Uvicorn: Pelayan ASGI

Uvicorn ialah pelayan ASGI sepantas kilat, dioptimumkan untuk mengendalikan kod tak segerak. Ia penting untuk menjalankan aplikasi FastAPI kerana ia mengendalikan permintaan HTTP yang masuk dan mengurus kitaran hayat permintaan ini.

Untuk menjalankan apl FastAPI anda dengan Uvicorn, gunakan arahan berikut:

uvicorn main:app --reload
Salin selepas log masuk
Salin selepas log masuk
  • main:app menentukan bahawa Uvicorn harus mencari contoh apl dalam fail main.py.
  • --reload membolehkan muat semula panas semasa pembangunan, jadi pelayan memuat semula secara automatik apabila anda menyimpan perubahan.

Apabila anda menjalankan arahan ini, Uvicorn akan mula menyediakan apl FastAPI anda dan anda boleh mengaksesnya di http://127.0.0.1:8000.


3. Starlette: Yayasan Rangka Kerja Web FastAPI

FastAPI dibina di atas Starlette, rangka kerja ASGI ringan yang mengendalikan operasi HTTP teras, termasuk penghalaan, perisian tengah dan sokongan WebSockets. Starlette menyediakan alatan peringkat rendah yang digunakan FastAPI untuk mengurus permintaan HTTP, menjadikannya asas yang stabil dan berprestasi untuk membina aplikasi web.

FastAPI memanfaatkan sistem penghalaan Starlette untuk menentukan titik akhir API. Contohnya:

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
Salin selepas log masuk
Salin selepas log masuk

Dalam contoh ini:

  • @app.get("/items/{item_id}") mentakrifkan laluan dengan parameter laluan item_id.
  • FastAPI mengendalikan jenis parameter laluan ini (int di sini) dengan menyepadukan sistem penghalaan Starlette dengan pemeriksaan dan pengesahan jenisnya.

Starlette juga membenarkan anda menambah peranti tengah untuk pelbagai operasi, seperti pengendalian CORS (Perkongsian Sumber Silang Asal), pengelogan permintaan atau pengesahan tersuai:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Fleksibiliti dalam Starlette ini menjadikan FastAPI sangat boleh dikonfigurasikan, membolehkan pembangun menambahkan perisian tengah tersuai dengan mudah mengikut keperluan.


4. UI Swagger: Dokumentasi API Interaktif

FastAPI menjana dokumentasi API interaktif secara automatik dengan Swagger UI. Dokumentasi ini tersedia secara lalai di /docs dan membenarkan pembangun menguji titik akhir terus daripada penyemak imbas.

Untuk melihat tindakan ini, mulakan apl FastAPI anda dan lawati http://127.0.0.1:8000/docs. Anda akan melihat UI Swagger interaktif yang menyenaraikan semua laluan anda, parameternya dan respons yang dijangkakan.

Satu lagi antara muka dokumentasi, ReDoc, turut disediakan di /redoc secara lalai, menawarkan paparan spesifikasi API yang lebih terperinci.


5. Pydantic: Pengesahan dan Pensirian Data

Salah satu aspek FastAPI yang paling berkuasa ialah penggunaannya Pydantic untuk pengesahan data. Model Pydantic membolehkan anda menentukan struktur data permintaan dan respons dengan kekangan jenis yang ketat dan pengesahan automatik.

Mari tambahkan model Pydantic pada contoh kami:

uvicorn main:app --reload
Salin selepas log masuk
Salin selepas log masuk

Dalam kod ini:

  • Model Item mewarisi daripada BaseModel dan mentakrifkan tiga medan: nama, harga dan is_offer. Medan ini mempunyai jenis data khusus dan nilai lalai pilihan untuk is_offer.
  • Apabila anda menghantar permintaan ke /items/{item_id} dengan data JSON, FastAPI menggunakan Pydantic untuk mengesahkan data terhadap model Item, menukar jenis data secara automatik jika boleh.

Cuba hantar permintaan seperti ini menggunakan UI Swagger di /docs:

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
Salin selepas log masuk
Salin selepas log masuk

FastAPI akan mengesahkan data dan mengembalikan sebarang ralat secara automatik jika data tidak sepadan dengan jenis yang dijangkakan. Contohnya, jika harga diberikan sebagai rentetan (seperti "dua puluh"), FastAPI akan membalas dengan ralat pengesahan terperinci.


6. Menyatukan Semuanya

Mari kembangkan apl kami dengan menambahkan lebih banyak laluan dan menggabungkan semua yang kami pelajari setakat ini:

from starlette.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
Salin selepas log masuk

Dengan persediaan ini:

  • Penghalaan dan Pengendalian Parameter: Titik akhir @app.get("/items/{item_id}") menunjukkan parameter laluan dan parameter pertanyaan (cth., q).
  • Pengendalian Pengecualian: Menggunakan HTTPException untuk respons ralat tersuai (cth., apabila item tidak ditemui).
  • CORS: Perisian tengah CORS membolehkan anda membuat permintaan daripada domain yang berbeza, penting untuk komunikasi hujung hadapan-belakang dalam apl web.

Menjalankan Aplikasi

Untuk menjalankan aplikasi ini, gunakan Uvicorn:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Navigasi ke http://127.0.0.1:8000/docs untuk melihat dokumentasi interaktif atau gunakan alat seperti cURL atau Posmen untuk menghantar permintaan ke titik akhir yang berbeza.


Ringkasan

FastAPI menggabungkan faedah prestasi pengaturcaraan tak segerak dengan kesederhanaan pembayang jenis Python untuk mencipta rangka kerja yang pantas, mudah digunakan dan sesuai untuk aplikasi pengeluaran. Dengan menyepadukan Uvicorn, Starlette, Swagger UI dan Pydantic, FastAPI menyediakan pendekatan yang sangat diperkemas untuk pembangunan API, menjadikannya pilihan yang bagus untuk aplikasi prototaip pantas dan gred pengeluaran.

Dengan adanya asas-asas teras ini, anda kini dilengkapi untuk menyelam lebih dalam ke dalam dunia FastAPI dan membina aplikasi berprestasi tinggi yang boleh berskala.

Rujukan

  1. Dokumentasi FastAPI
  2. Dokumentasi Uvicorn
  3. Dokumentasi Starlette
  4. Dokumentasi Pydantic
  5. Dokumentasi UI Swagger

Atas ialah kandungan terperinci Memahami Asas FastAPI: Panduan untuk FastAPI, Uvicorn, Starlette, Swagger UI dan Pydantic. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan