Press ESC to close

Tutorial FastAPI #2: Panduan Lengkap Routing dan Path Parameters di FastAPI

Pengenalan Routing di FastAPI {#pengenalan-routing}

Routing adalah cara kita mengatur “alamat” atau endpoint di API kita. Di FastAPI, routing memungkinkan kita menentukan bagaimana API kita merespons request ke URL tertentu.

Konsep Dasar Routing

from fastapi import FastAPI

app = FastAPI(
    title="API Belajar Routing",
    description="Tutorial routing dan path parameters di FastAPI",
    version="2.0.0"
)

@app.get("/")
async def read_root():
    return {
        "message": "Selamat datang di tutorial routing FastAPI!",
        "status": "success"
    }

HTTP Methods di FastAPI {#http-methods}

FastAPI mendukung semua HTTP methods standar untuk REST API. Mari kita pelajari satu per satu:

1. GET Method – Mengambil Data

@app.get("/products")
async def get_products():
    return {
        "message": "Daftar produk berhasil diambil",
        "products": [
            {"id": 1, "name": "Laptop Gaming", "price": 15000000},
            {"id": 2, "name": "Mechanical Keyboard", "price": 1500000},
        ]
    }

2. POST Method – Menambah Data

from pydantic import BaseModel

class Product(BaseModel):
    name: str
    price: float

@app.post("/products")
async def create_product(product: Product):
    return {
        "message": "Produk berhasil ditambahkan",
        "product_info": product.dict()
    }

3. PUT Method – Update Data

@app.put("/products/{product_id}")
async def update_product(product_id: int, product: Product):
    return {
        "message": f"Produk dengan ID {product_id} berhasil diupdate",
        "product_info": product.dict()
    }

4. DELETE Method – Hapus Data

@app.delete("/products/{product_id}")
async def delete_product(product_id: int):
    return {
        "message": f"Produk dengan ID {product_id} berhasil dihapus"
    }

Path Parameters di FastAPI {#path-parameters}

Path parameters adalah variabel yang menjadi bagian dari URL. Ini sangat berguna untuk mengidentifikasi resource spesifik.

Basic Path Parameters

@app.get("/users/{user_id}")
async def read_user(user_id: int):
    return {
        "user_id": user_id,
        "message": f"Data user dengan ID {user_id}"
    }

Multiple Path Parameters

@app.get("/users/{user_id}/orders/{order_id}")
async def get_user_order(user_id: int, order_id: int):
    return {
        "user_id": user_id,
        "order_id": order_id,
        "message": f"Order {order_id} dari user {user_id}"
    }

Query Parameters di FastAPI {#query-parameters}

Query parameters adalah parameter opsional yang ditambahkan setelah tanda tanya (?) di URL.

Implementasi Query Parameters

from typing import Optional

@app.get("/products/search")
async def search_products(
    keyword: str,                    # Required parameter
    category: Optional[str] = None,  # Optional parameter
    min_price: Optional[float] = 0,
    max_price: Optional[float] = None,
    sort: str = "name",             # Default value
    page: int = 1,
    limit: int = 10
):
    return {
        "search_params": {
            "keyword": keyword,
            "category": category,
            "price_range": {
                "min": min_price,
                "max": max_price
            },
            "sort": sort,
            "pagination": {
                "page": page,
                "limit": limit
            }
        },
        "message": "Hasil pencarian produk"
    }

Tips dan Best Practices {#tips-dan-best-practices}

1. Struktur URL yang Baik

  • Gunakan kata benda untuk resource
  • Gunakan nested routing untuk relasi
  • Konsisten dalam penamaan
# Good
@app.get("/users/{user_id}/orders")
@app.get("/products/categories/{category_id}")

# Not Good
@app.get("/get-user-orders/{user_id}")
@app.get("/productCategory/{category_id}")

2. Validasi Path Parameters

from fastapi import Path

@app.get("/products/{product_id}")
async def get_product(
    product_id: int = Path(..., gt=0, description="ID produk harus lebih dari 0")
):
    return {"product_id": product_id}

3. Error Handling yang Baik

from fastapi import HTTPException

@app.get("/users/{user_id}")
async def get_user(user_id: int):
    if user_id <= 0:
        raise HTTPException(
            status_code=400,
            detail="User ID tidak valid!"
        )
    return {"user_id": user_id}

Latihan Praktik

  1. Buat CRUD endpoint untuk manajemen todo list
  2. Implementasikan search dan filter
  3. Tambahkan pagination
  4. Buat nested routes

Sumber Daya Tambahan

Tags: #FastAPI #Python #WebDevelopment #API #Routing #Backend #Programming #Tutorial #Indonesia


Pro Tips: Jangan lupa untuk selalu menggunakan type hints dan dokumentasi yang baik dalam kode Anda. Ini akan membuat API documentation Anda lebih informatif.

[Schema.org Article Markup]

{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Tutorial FastAPI #2: Panduan Lengkap Routing dan Path Parameters",
  "description": "Tutorial lengkap cara mengimplementasikan routing dan path parameters di FastAPI...",
  "author": {
    "@type": "Person",
    "name": "[Nama Anda]"
  },
  "datePublished": "2024-10-20",
  "dateModified": "2024-10-29",
  "publisher": {
    "@type": "Organization",
    "name": "[Nama Website Anda]"
  }
}

Leave a Reply

Your email address will not be published. Required fields are marked *