Rumah pembangunan bahagian belakang Tutorial Python Bahagian Membina API Todo dengan FastAPI: Panduan Langkah demi Langkah

Bahagian Membina API Todo dengan FastAPI: Panduan Langkah demi Langkah

Aug 28, 2024 pm 06:32 PM

Part Building a Todo API with FastAPI: Step-by-Step Guide

Membina API Todo dengan FastAPI: Panduan Langkah demi Langkah

Kod boleh didapati di sini: GitHub - jamesbmour/blog_tutorials:

I. Pengenalan

Dalam siaran sebelumnya, kami memperkenalkan FastAPI dan menyediakan struktur projek asas. Sekarang, kami akan melangkah lebih jauh dengan membina API Todo yang berfungsi. Pada penghujung tutorial ini, anda akan mempunyai bahagian belakang yang berfungsi yang boleh membuat, membaca, mengemas kini dan memadam item tugasan.

Perkara yang Kami Akan Liput:

  • Mereka Model Data Todo
  • Melaksanakan Operasi CRUD
  • Mencipta Titik Akhir API
  • Menambah Pengesahan Input dan Pengendalian Ralat
  • Menguji API
  • Kod Pemfaktoran Semula dan Penyusunan

II. Mereka bentuk Model Data Todo

Untuk mengurus tugasan, kita mesti menentukan model data yang mewakili item tugasan. FastAPI menggunakan model Pydantic untuk mengesahkan dan menghuraikan data, jadi kami akan memanfaatkannya di sini.

A. Mentakrifkan Skema Todo

Kami akan mencipta dua model menggunakan Pydantic:

  • TodoCreate: Untuk memasukkan data semasa membuat atau mengemas kini todo.
  • Todo: Untuk item todo yang lengkap, termasuk medan seperti id dan created_at.
from pydantic import BaseModel
from typing import Optional
from datetime import datetime

class TodoCreate(BaseModel):
    title: str
    description: Optional[str] = None
    completed: bool = False

class Todo(BaseModel):
    id: str
    title: str
    description: Optional[str] = None
    completed: bool
    created_at: datetime

Salin selepas log masuk

B. Menjelaskan Bidang

  • id: Pengecam unik untuk setiap todo.
  • tajuk: Kandungan utama todo.
  • penerangan: Butiran tambahan (pilihan).
  • selesai: Status Boolean todo (sama ada ia selesai atau tidak).
  • created_at: Cap masa yang menunjukkan masa todo dibuat.

III. Mencipta Operasi CRUD untuk Todos

CRUD bermaksud Cipta, Baca, Kemas Kini dan Padam—empat operasi asas untuk mengurus data. Kami akan melaksanakan operasi ini menggunakan pangkalan data dalam memori (senarai ringkas) untuk tutorial ini.

A. Menyediakan Pangkalan Data Dalam Memori

Kami akan menggunakan senarai untuk menyimpan tugasan kami. Untuk memudahkan, kami juga akan menambah beberapa contoh todos.

from uuid import uuid4
from datetime import datetime

todos = [
    {
        "id": str(uuid4()),
        "title": "Learn FastAPI",
        "description": "Go through the official FastAPI documentation and tutorials.",
        "completed": False,
        "created_at": datetime.now(),
    },
    {
        "id": str(uuid4()),
        "title": "Build a Todo API",
        "description": "Create a REST API for managing todo items using FastAPI.",
        "completed": False,
        "created_at": datetime.now(),
    },
    {
        "id": str(uuid4()),
        "title": "Write blog post",
        "description": "Draft a blog post about creating a Todo API with FastAPI.",
        "completed": False,
        "created_at": datetime.now(),
    },
]

Salin selepas log masuk

B. Melaksanakan Fungsi Pembantu

Kami akan melaksanakan fungsi pembantu mudah untuk mencari todo mengikut idnya.

def get_todo_by_id(todo_id: str):
    for todo in todos:
        if todo["id"] == todo_id:
            return todo
    return None

Salin selepas log masuk

IV. Melaksanakan Titik Akhir API

A. Mencipta Todo Baharu

Titik akhir POST membolehkan pengguna membuat item tugasan baharu.

@app.post("/todos/", response_model=Todo)
def create_todo(todo: TodoCreate):
    new_todo = Todo(
        id=str(uuid4()),
        title=todo.title,
        description=todo.description,
        completed=todo.completed,
        created_at=datetime.now()
    )
    todos.append(new_todo.dict())
    return new_todo

Salin selepas log masuk

B. Mendapatkan Semua Todos

Titik akhir GET mendapatkan semula semua tugasan daripada pangkalan data dalam memori kami.

@app.get("/todos/", response_model=List[Todo])
def get_all_todos():
    return todos

Salin selepas log masuk

C. Mendapatkan Todo Tunggal

Titik akhir GET membenarkan mendapatkan semula satu tugasan mengikut idnya.

@app.get("/todos/{todo_id}", response_model=Todo)
def get_todo(todo_id: str):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    return todo

Salin selepas log masuk

D. Mengemas kini Todo

Titik akhir PUT membolehkan pengguna mengemas kini todo sedia ada.

@app.put("/todos/{todo_id}", response_model=Todo)
def update_todo(todo_id: str, todo_data: TodoCreate):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    todo["title"] = todo_data.title
    todo["description"] = todo_data.description
    todo["completed"] = todo_data.completed
    return Todo(**todo)

Salin selepas log masuk

E. Memadam Todo

Titik akhir DELETE membolehkan pengguna memadamkan todo mengikut idnya.

@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: str):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    todos.remove(todo)
    return {"detail": "Todo deleted successfully"}

Salin selepas log masuk

V. Menambah Pengesahan Input dan Pengendalian Ralat

A. Pengesahan Input dengan Pydantic

FastAPI secara automatik mengesahkan data input terhadap model Pydantic yang kami takrifkan. Ini memastikan bahawa data memenuhi skema jangkaan kami sebelum ia diproses.

B. Pengendalian Ralat Tersuai

Kami boleh menyesuaikan respons ralat dengan menambahkan pengendali pengecualian.

@app.exception_handler(HTTPException)
def http_exception_handler(request, exc: HTTPException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

Salin selepas log masuk

VI. Menguji API

FastAPI disertakan dengan dokumentasi UI Swagger interaktif, menjadikannya mudah untuk menguji titik akhir API anda. Hanya jalankan aplikasi dan navigasi ke /docs dalam penyemak imbas anda.

Contoh Pengujian

  • Buat Todo: Uji titik akhir POST dengan membuat todo baharu.
  • Dapatkan Todos: Gunakan titik akhir GET untuk mengambil semua todos atau yang tertentu melalui id.
  • Kemas kini dan Padam: Uji titik akhir PUT dan DELETE untuk mengemas kini atau mengalih keluar todo.

VII. Pemfaktoran Semula dan Kod Penyusunan

Apabila aplikasi berkembang, adalah penting untuk memastikan kod itu teratur. Berikut adalah beberapa petua:

A. Memindahkan Model ke Fail Berasingan

Anda boleh mengalihkan model Pydantic anda ke fail models.py untuk memastikan fail aplikasi utama anda bersih.

B. Mencipta Penghala untuk Titik Akhir Todo

Pertimbangkan untuk membuat penghala berasingan untuk titik akhir yang berkaitan dengan todo, terutamanya apabila API anda berkembang.

VIII. Langkah Seterusnya

Dalam siaran seterusnya, kami akan menyepadukan pangkalan data sebenar (seperti SQLite atau PostgreSQL) ke dalam aplikasi FastAPI kami. Kami juga akan melihat ke dalam pengesahan pengguna dan ciri yang lebih maju.

Cadangan Penambahbaikan:

  • Tambahkan penapisan dan penomboran pada titik akhir GET.
  • Laksanakan pengesahan pengguna untuk mengurus tugas peribadi.

IX. Kesimpulan

Dalam tutorial ini, kami membina API Todo mudah menggunakan FastAPI. Kami bermula dengan mereka bentuk model data, melaksanakan operasi CRUD dan mencipta titik akhir untuk mengurus tugasan. Kami juga menyentuh tentang pengesahan input, pengendalian ralat dan ujian. Dengan asas ini, anda boleh memanjangkan API lagi atau menyepadukannya dengan bahagian hadapan untuk mencipta aplikasi sepenuhnya.

Jika anda ingin menyokong penulisan saya atau belikan saya bir:
https://buymeacoffee.com/bmours

Atas ialah kandungan terperinci Bahagian Membina API Todo dengan FastAPI: Panduan Langkah demi Langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah? Apr 02, 2025 am 07:15 AM

Cara mengelakkan dikesan semasa menggunakan fiddlerevery di mana untuk bacaan lelaki-dalam-pertengahan apabila anda menggunakan fiddlerevery di mana ...

Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Bagaimana cara menyalin seluruh lajur satu data ke dalam data data lain dengan struktur yang berbeza di Python? Apr 01, 2025 pm 11:15 PM

Apabila menggunakan Perpustakaan Pandas Python, bagaimana untuk menyalin seluruh lajur antara dua data data dengan struktur yang berbeza adalah masalah biasa. Katakan kita mempunyai dua DAT ...

Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Bagaimanakah uvicorn terus mendengar permintaan http tanpa serving_forever ()? Apr 01, 2025 pm 10:51 PM

Bagaimanakah Uvicorn terus mendengar permintaan HTTP? Uvicorn adalah pelayan web ringan berdasarkan ASGI. Salah satu fungsi terasnya ialah mendengar permintaan HTTP dan teruskan ...

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam? Apr 02, 2025 am 07:18 AM

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

Bagaimana untuk mendapatkan data berita yang melangkaui mekanisme anti-crawler Investing.com? Bagaimana untuk mendapatkan data berita yang melangkaui mekanisme anti-crawler Investing.com? Apr 02, 2025 am 07:03 AM

Memahami Strategi Anti-Crawling of Investing.com Ramai orang sering cuba merangkak data berita dari Investing.com (https://cn.investing.com/news/latest-news) ...

See all articles