Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • API Pagination, Filtering, Sorting và Rate Limiting

    API Pagination, Filtering, Sorting và Rate Limiting – Vũ khí không thể thiếu khi làm việc với API "enterprise-grade"

    Bạn đã bao giờ gọi một REST API trả về hàng ngàn kết quả, chỉ để phải parse thủ công từng dòng JSON trong Python? Nếu rồi, bạn sẽ hiểu vì sao pagination, filtering, sorting, và rate limiting là những kỹ thuật "cứu cánh" cho cả client lẫn server trong thế giới lập trình hiện đại. Bài viết này là để giúp bạn — DevOps, NetDev, Automation engineer — không còn bỡ ngỡ khi gặp chúng trong thực chiến.
    🧩 Pagination – Khi dữ liệu quá nhiều để nhét vào một lần

    Thay vì trả về 10.000 user, API hiện đại thường chia nhỏ kết quả thành từng trang, ví dụ GET /users?page=2&limit=100. Nhưng đừng tưởng API nào cũng có cách giống nhau.
    Với Cisco Web API, họ chuẩn hóa việc này theo RFC 5988 (Web Linking), nghĩa là mỗi response thường đi kèm các header như:

    Link: <https://api.example.com/users?page=3>; rel="next", <https://api.example.com/users?page=1>; rel="prev"

    👉 Protip: Nếu rel="next" bị null hoặc thiếu → bạn đang ở trang cuối rồi đó!
    🎯 Filtering – Chỉ lấy cái bạn cần

    Giống như WHERE trong SQL, filtering giúp bạn lấy subset dữ liệu dựa trên điều kiện, ví dụ:

    GET /devices?model=C9300 GET /alerts?severity=critical&timestamp>2024-01-01

    💡 Kỹ thuật này giúp bạn giảm băng thông, RAMthời gian xử lý client-side. Không có lý do gì để fetch 5000 record rồi mới lọc ở Python, trừ khi bạn thích tự hành.
    🔃 Sorting – Đưa dữ liệu về đúng thứ tự bạn cần

    Bạn muốn danh sách user theo thứ tự đăng nhập gần nhất? Hay top thiết bị bị cảnh báo nhiều nhất?

    GET /users?sort=last_login:desc GET /devices?sort=alerts_count:desc

    Sắp xếp server-side không chỉ tiện mà còn giúp cache hiệu quả hơn ở các CDN/API Gateway.
    🚨 Rate Limiting – Bức tường bảo vệ API

    Không chỉ giúp chống DoS, rate limit còn là biện pháp phân chia tài nguyên "công bằng" giữa các client:
    • Theo người dùng: mỗi user được 1000 call/ngày.
    • Theo thời gian: tối đa 10 request/giây.
    • Theo vùng địa lý: chống các API call "kỳ lạ" từ vùng không liên quan.
    👮‍♂️ Cisco, Google, Amazon đều giới hạn request theo plan, nghĩa là muốn gọi nhiều hơn → phải nâng cấp gói.
    ✨ Có thể implement rate limiting ở:
    • Client-side: dùng timer, loading bar, retry mechanism…
    • Server-side: áp dụng thật sự hiệu quả với Redis token bucket hoặc API Gateway như Kong, Apigee, AWS API Gateway...

    💡 Một ví dụ thực tế (Python + Cisco DNA Center)

    import requests url = "https://sandboxdnac.cisco.com/dna/intent/api/v1/network-device"
    headers = {"X-Auth-Token": "<your_token>"}
    params = {"limit": 100, "offset": 200} response = requests.get(url, headers=headers, params=params) print(response.json())

    Với API Cisco, bạn nên luôn kiểm tra các trường như nextPage hoặc pagination để lặp trang chính xác.
    ✅ Tổng kết – Làm chủ API là làm chủ automation

    Trong thời đại Infrastructure-as-Code, nếu bạn đang xây tool với Python, Ansible, hay Postman để tương tác API, thì việc hiểu rõ pagination, filter, sort, rate limiting là tối quan trọng để:
    • Không bị timeout
    • Không “ăn” hết quota
    • Không làm sập API của chính mình

    devops #NetDev #VnProAutomation #CiscoAPI #PythonRequests #APIBestPractices #RateLimiting #Pagination #RFC5988 #CiscoDNA restconf netconf
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X