Bahagian Membina API Todo dengan FastAPI: Panduan Langkah demi Langkah

王林
Lepaskan: 2024-08-28 18:32:24
asal
284 orang telah melayarinya

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!