Nhảy đến nội dung chính

Metadata

Metadata nghĩa là "dữ liệu về dữ liệu" — tức là thông tin mô tả về một dữ liệu nào đó.

Hay nói cách khác: Metadata không phải là nội dung chính, mà là thông tin bổ sung để mô tả hoặc hướng dẫn cách sử dụng dữ liệu đó.


Ví dụ dễ hiểu

Ví dụ 1: Hình ảnh
  • Dữ liệu: một bức ảnh .jpg

  • Metadata:

    • Kích thước ảnh: 1920x1080

    • Ngày chụp: 2024-04-17

    • Thiết bị: iPhone 13

    • GPS: Hà Nội, Việt Nam

Bạn không nhìn thấy metadata trong ảnh, nhưng phần mềm máy ảnh và thư viện ảnh dùng metadata để sắp xếp, hiển thị, tìm kiếm ảnh.


Ví dụ 2: Bài hát MP3
  • Dữ liệu: file nhạc .mp3

  • Metadata:

    • Tên bài hát

    • Ca sĩ

    • Album

    • Thời lượng

Các ứng dụng như Zing MP3, Spotify dùng metadata để hiển thị thông tin bài hát mà không cần phát nó.

Trong Python

from typing import Annotated

Age = Annotated[int, "Độ tuổi phải lớn hơn 0"]
  • int là kiểu dữ liệu chính

  • "Độ tuổi phải lớn hơn 0" là metadata — mô tả thêm, nhưng không ảnh hưởng tới chạy code

  • Framework như Pydantic, LangGraph, v.v. sẽ đọc phần metadata này để thực hiện kiểm tra, xử lý tự động, hoặc hiển thị thông tin

Ví dụ 3: 

Giả sử bạn đang xây dựng một API đăng ký người dùng:

from pydantic import BaseModel, Field, EmailStr

class User(BaseModel):
    name: str = Field(..., title="Tên đầy đủ", min_length=3, max_length=50, description="Họ tên người dùng")
    email: EmailStr = Field(..., description="Email hợp lệ để xác thực")
    age: int = Field(..., gt=0, le=120, description="Tuổi phải lớn hơn 0 và không quá 120")

Pydantic sử dụng metadata này để:

  • Tự động kiểm tra dữ liệu

  • Sinh thông báo lỗi rõ ràng

  • (Khi dùng với FastAPI) tự tạo ra tài liệu Swagger đẹp & chi tiết

Kết hợp với FastAPI để thấy Metadata hoạt động

from fastapi import FastAPI
from pydantic import BaseModel, Field, EmailStr

app = FastAPI()

class User(BaseModel):
    name: str = Field(..., title="Tên", description="Tên người dùng", min_length=3)
    email: EmailStr = Field(..., description="Email hợp lệ")
    age: int = Field(..., gt=0, le=100, description="Tuổi (0-100)")

@app.post("/register")
def register(user: User):
    return {"message": "Đăng ký thành công", "data": user}

FastAPI sẽ:

  • Hiển thị các metadata như title, description, min_length, gt, v.v.

  • Kiểm tra lỗi nếu người dùng nhập sai format

  • Dùng metadata để gợi ý giao diện form


Tác giả: Đỗ Ngọc Tú
Công Ty Phần Mềm VHTSoft