Bỏ qua tới nội dung chính
Quay lại tin tức

8 mẫu thiết kế API tinh gọn đến mức khó tin vào năm 2026

Medium Towards AI· Muhammed Mukthar· 30/5/2026general

Theo Báo cáo Tình hình API năm 2025 của Postman, 93% nhà phát triển sử dụng REST làm giao thức API chính và 69% dành hơn 10 giờ mỗi tuần cho các công việc liên quan đến API. Đây là một phần đáng kể trong sự nghiệp của hầu hết các nhà phát triển. Tuy nhiên, các mẫu hình giúp API REST đạt cấp độ sản xuất thực sự – các thao tác bất biến (idempotent operations), hợp đồng lỗi có cấu trúc (structured error contracts), phân trang bằng con trỏ (cursor pagination), cập nhật có điều kiện (conditional updates) – lại xuất hiện trong ít cơ sở mã hơn so với lẽ ra phải có, xét về thời gian chúng đã tồn tại. Đây không phải là vấn đề triết lý kiến trúc. Đây không phải là các cuộc tranh luận GraphQL-so với-REST hay các tuyên ngôn về microservices. Mỗi mẫu hình trong danh sách này đều giải quyết

Theo Báo cáo Tình trạng API năm 2025 của Postman, 93% nhà phát triển sử dụng REST làm giao thức API chính và 69% dành hơn 10 giờ mỗi tuần cho các công việc liên quan đến API. Đây là một phần đáng kể trong sự nghiệp của hầu hết các nhà phát triển. Tuy nhiên, các mẫu hình giúp API REST đạt cấp độ sản xuất thực sự – các hoạt động bất biến (idempotent operations), hợp đồng lỗi có cấu trúc (structured error contracts), phân trang con trỏ (cursor pagination), cập nhật có điều kiện (conditional updates) – lại xuất hiện trong ít cơ sở mã hơn so với lẽ ra phải có, xét về thời gian chúng đã tồn tại. Đây không phải là vấn đề triết lý kiến trúc. Đây không phải là các cuộc tranh luận GraphQL-so-với-REST hay các tuyên ngôn về microservices. Mỗi mẫu hình trong danh sách này giải quyết một chế độ lỗi cụ thể xuất hiện trong các hệ thống sản xuất thực tế: trùng lặp phí, xử lý lỗi không nhất quán, phân trang bị lỗi, mất cập nhật đồng thời, cuộc gọi webhook không được xác minh. Các công ty xử lý tốt những vấn đề này – Stripe, GitHub, Google – đã công khai các quyết định thiết kế API của họ. Những gì họ chọn để chuẩn hóa không phải là bí mật. Nó chỉ chưa được phổ biến đủ sâu trong hệ thống. Tóm tắt: 8 mẫu hình đó là khóa bất biến (idempotency keys), lỗi chi tiết vấn đề RFC 9457 (RFC 9457 Problem Details errors), phân trang con trỏ (cursor pagination), mặt nạ trường (field masks), ETag có điều kiện (conditional ETags), định phiên bản dựa trên tiêu đề (header-based versioning), xác thực HMAC-SHA256 webhook và ID tương quan yêu cầu (request correlation IDs). Năm 2025, 57% tổ chức đã bị tấn công dữ liệu API – và ba trong số các mẫu hình này trực tiếp giải quyết các bề mặt tấn công đã khiến các vụ vi phạm đó có thể xảy ra. Tại sao hầu hết các API được triển khai mà không có các mẫu hình quan trọng nhất. Năm 2025, Báo cáo Tình trạng API của Postman cho thấy 82% tổ chức đã áp dụng một mức độ phát triển ưu tiên API nhất định, tăng từ 74% vào năm 2024. Tuy nhiên, cùng năm đó, 57% tổ chức đã bị tấn công dữ liệu liên quan đến API (Traceable.ai 2025 State of API Security, Ponemon Institute, 1.548 người trả lời). Hai sự thật này cùng tồn tại vì "ưu tiên API" thường có nghĩa là "chúng tôi thiết kế trước khi xây dựng" – chứ không phải "chúng tôi triển khai tính bất biến, lỗi có cấu trúc và xác thực HMAC". Các mẫu hình giúp API kiên cường và an toàn là một lĩnh vực riêng biệt so với các mẫu hình giúp chúng nhanh chóng trong thiết kế. REST chiếm ưu thế với 93%, nhưng các API hiện đại xếp lớp các giao thức bổ sung lên trên – Webhooks, WebSockets và GraphQL đều phục vụ các trường hợp sử dụng cụ thể mà REST thuần túy không làm được. Nguồn: Postman 2025 State of the API. Trích dẫn: Năm 2025, 82% tổ chức đã áp dụng một mức độ phát triển ưu tiên API nhất định, tăng từ 74% vào năm 2024, nhưng 57% đã trải qua một vụ vi phạm dữ liệu liên quan đến API trong cùng thời kỳ. Khoảng cách giữa "thiết kế API trước" và "triển khai API an toàn" là nơi phát sinh hầu hết các sự cố sản xuất. Nguồn: Postman 2025 State of the API; Traceable.ai 2025 State of API Security (Ponemon Institute, 1.548 người trả lời). 8 mẫu hình thiết kế API đáng triển khai vào năm 2026. Mỗi mẫu hình dưới đây đang được sử dụng tích cực trong sản xuất tại các công ty có API xử lý hàng tỷ yêu cầu mỗi ngày. Không mẫu hình nào yêu cầu di chuyển khung công tác. Mỗi mẫu hình có thể được trang bị thêm vào một API hiện có, từng điểm cuối một. 1. Khóa bất biến (Idempotency Keys) – Ngăn chặn các tác dụng phụ trùng lặp khi thử lại. Máy khách gửi một khóa duy nhất – thường là UUID v4 – trong tiêu đề Idempotency-Key với mỗi yêu cầu thay đổi trạng thái. Máy chủ lưu trữ phản hồi dựa trên khóa đó. Nếu cùng một khóa đến lần nữa (thử lại mạng, nhấp đúp), máy chủ sẽ trả về kết quả đã lưu trữ mà không thực hiện lại thao tác. IETF hiện đang chuẩn hóa tiêu đề trong bản nháp draft-ietf-httpapi-idempotency-key-header. Lỗi mạng và thử lại của máy khách là không thể tránh khỏi. Nếu không có tính bất biến, một yêu cầu thanh toán hết thời gian trước khi phản hồi. việc đến khiến khách hàng rơi vào tình thế bất khả kháng: giao dịch đã được thực hiện hay chưa? Việc thử lại có nguy cơ bị tính phí hai lần. Với khóa bất biến (idempotency keys), câu trả lời rất đơn giản: thử lại an toàn, mọi lúc. Stripe lưu trữ kết quả khóa trong tối thiểu 24 giờ. Khóa có độ dài tối đa 255 ký tự và UUID v4 là định dạng được khuyến nghị, đủ ngẫu nhiên để tránh xung đột trong hàng triệu yêu cầu hàng ngày. # Yêu cầu từ máy khách — POST với khóa bất biến POST /v1/charges HTTP/1.1 Host: api.example.com Idempotency-Key: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Content-Type: application/json{ "amount": 2000, "currency": "usd", "source": "tok_visa" }# Triển khai phía máy chủ (mã giả Node.js) async function chargeHandler(req) { const key = req.headers['idempotency-key']; const cached = await redis.get(`idempotency:${key}`); if (cached) return JSON.parse(cached); // trả về kết quả đã lưu, không thực thi lại const result = await processCharge(req.body); await redis.set(`idempotency:${key}`, JSON.stringify(result), 'EX', 86400); return result; } 2. RFC 9457 Problem Details — Phản hồi lỗi có thể đọc bằng máy RFC 9457 (tháng 7/2023, thay thế RFC 7807) định nghĩa một định dạng lỗi JSON tiêu chuẩn với năm trường: type (một URI xác định lớp lỗi), title (một bản tóm tắt ngắn gọn, dễ đọc), status (mã trạng thái HTTP), detail (một giải thích dễ đọc cho sự cố cụ thể này) và instance (một URI cho phiên bản lỗi cụ thể này). Kiểu phương tiện là application/problem+json. Vấn đề mà điều này giải quyết là một vấn đề mà mọi người tiêu dùng API đều gặp phải: hình dạng lỗi thay đổi giữa các điểm cuối (endpoints), giữa các nhóm và giữa các phiên bản. Đôi khi là {"error": "Not found"}. Đôi khi là {"message": "Error", "code": 404}. Các máy khách không thể viết logic xử lý lỗi đáng tin cậy dựa trên một mục tiêu di động. Problem Details cung cấp cho mọi máy khách một cấu trúc nhất quán để phân tích cú pháp, ghi nhật ký và hiển thị, đồng thời URI loại cung cấp cho tài liệu một địa chỉ ổn định. Spring Boot 6+ tạo phản hồi RFC 9457 theo mặc định. .NET Core có hỗ trợ ProblemDetails tích hợp sẵn. RFC là câu trả lời đúng cho câu hỏi "định dạng lỗi của chúng ta nên trông như thế nào?". HTTP/1.1 422 Unprocessable Entity Content-Type: application/problem+json{ "type": "https://api.example.com/problems/insufficient-funds", "title": "Insufficient Funds", "status": 422, "detail": "Số dư tài khoản 12,50 USD thấp hơn mức tối thiểu yêu cầu 50,00 USD.", "instance": "/transactions/trans_a1b2c3d4" }# RFC 9457 cũng hỗ trợ các thành phần mở rộng cho ngữ cảnh miền: { "type": "https://api.example.com/problems/v

Nguồn tin: Medium Towards AI — Tác giả: Muhammed Mukthar. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.