Skip to content

Cum să documentezi un API Python cu Swagger, OpenAPI și ReDoc

DodaTech Updated 2025-01-15 3 min read

In this tutorial, you'll learn about Cum să documentezi un API Python cu Swagger, OpenAPI și ReDoc. We cover key concepts, practical examples, and best practices to help you understand and apply this topic effectively.

Documentația API este esențială pentru dezvoltatori care integrează serviciul tău. În acest ghid vei învăța cum să documentezi automat un API cu Swagger, OpenAPI și ReDoc folosind FastAPI.

Problema

Clienții nu știu cum să folosească API-ul tău. Trebuie să răspunzi constant la întrebări despre endpoint-uri, parametri și formate de date. Fără documentație, integrarea este lentă și predispusă la erori.

Soluția Rapidă

1. Documentație automată cu FastAPI

FastAPI generează documentație OpenAPI automat. Tot ce ai nevoie este type hints:

from fastapi import FastAPI, Query, Path
from pydantic import BaseModel
from typing import List

app = FastAPI(
    title="API Magazin Online",
    description="API pentru gestionarea produselor",
    version="1.0.0",
    contact={
        "name": "Echipa DodaTech",
        "email": "contact@dodatech.com"
    }
)

class Produs(BaseModel):
    nume: str
    pret: float
    categorie: str

@app.get(
    "/produse",
    summary="Listează toate produsele",
    description="Returnează lista completă de produse cu posibilitatea de filtrare",
    response_description="Lista de produse",
    tags=["Produse"]
)
def lista_produse(
    categorie: str = Query(None, description="Filtrare după categorie"),
    limit: int = Query(10, ge=1, le=100, description="Număr maxim de rezultate")
):
    """Ruta principală pentru listarea produselor."""
    return [{"id": 1, "nume": "Laptop", "pret": 3500}]

@app.post(
    "/produse",
    summary="Creează un produs nou",
    status_code=201,
    tags=["Produse"]
)
def creeaza_produs(p: Produs):
    """Adaugă un produs nou în catalog."""
    return {"id": 2, **p.model_dump()}

Accesează:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

2. Adnotări pentru modele

from pydantic import Field, BaseModel
from typing import Optional
from datetime import datetime

class Utilizator(BaseModel):
    id: int = Field(..., description="ID unic utilizator")
    nume: str = Field(..., description="Numele complet", example="Ion Popescu")
    email: str = Field(..., description="Adresa de email")
    creat_la: datetime = Field(
        default_factory=datetime.now,
        description="Data creării contului"
    )

3. Exemple de request-uri

class EroareAPI(BaseModel):
    eroare: str
    cod: str

    class Config:
        schema_extra = {
            "example": {
                "eroare": "Produsul nu a fost găsit",
                "cod": "PRODUS_NEGASIT"
            }
        }

4. Documentație în Flask cu Flasgger

pip install flasgger
from flasgger import Swagger
from flask import Flask, jsonify

app = Flask(__name__)
swagger = Swagger(app)

@app.route("/produse/<int:id>")
def produs(id):
    """
    Obține un produs după ID
    ---
    parameters:
      - name: id
        in: path
        type: integer
        required: true
    responses:
      200:
        description: Produsul găsit
        schema:
          type: object
          properties:
            id: {type: integer}
            nume: {type: string}
    """
    return jsonify({"id": id, "nume": "Laptop"})

5. Fișier OpenAPI manual

openapi: "3.0.0"
info:
  title: API Magazin
  version: "1.0.0"
paths:
  /produse:
    get:
      summary: Lista produse
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Produs'

Prevenție

  • Documentează fiecare endpoint cu parametri, body și status codes
  • Include exemple de request-uri și response-uri
  • Menține versiunea documentației sincronizată cu codul
  • Folosește descrieri în limba română sau engleză consistent

Greșeli Comune

  1. Documentație nesincronizată cu codul -- documentația manuală devine rapid depășită
  2. Lipsa exemplelor de request-uri -- dezvoltatorii trebuie să ghicească formatul datelor
  3. Ignorarea codurilor de eroare -- nu documenta doar succesul, ci și toate erorile posibile
  4. Descrieri vagi -- "Endpoint pentru utilizatori" fără a explica parametrii
  5. Fără informații de contact -- dezvoltatorii nu au unde să raporteze probleme

Exercițiu Practic

Creează un API documentat cu Swagger UI pentru un sistem de gestiune a comenzilor cu endpoint-uri CRUD, modele documentate și exemple pentru fiecare eroare posibilă.

FAQ

### Ce este OpenAPI?

OpenAPI este un standard open-source pentru descrierea API-urilor REST. Folosește format JSON sau YAML pentru a defini endpoint-uri, parametri, modele și răspunsuri.

Swagger UI vs ReDoc -- care e mai bun?

Swagger UI permite testarea interactivă a endpoint-urilor direct din browser. ReDoc oferă o prezentare mai curată și mai ușor de navigat pentru citire.

Cum testez API-ul din Swagger UI?

FastAPI expune butonul "Try it out" în Swagger UI. Poți completa parametrii, apăsa "Execute" și vezi response-ul real direct din documentație.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro