Giải mã API Anything: Biến mọi website thành API cho AI Agent không cần trình duyệt
Khám phá cách API Anything bắt gói tin frontend một lần, học slot tự động và thay thế headless browser bằng API HTTP 120ms tự phục hồi khi web đổi giao diện.

Khi các trợ lý lập trình như Claude Code, Cursor hay Codex cần dữ liệu từ web không có API công khai, phản xạ của kỹ sư là giao cho chúng một headless browser. Bạn bảo agent tra vé Google Flights, xem đánh giá Goodreads, hay tìm hồ sơ LinkedIn. Hậu trường: agent bật cả Chromium, nuốt 600MB RAM, đợi 15 giây tải JavaScript, rồi nhồi 80.000 token HTML vào cửa sổ ngữ cảnh.
Mỗi lượt tra cứu đốt ba mươi cent, chậm chạp và gãy vụn ngay khi đội frontend đổi class CSS.
Cộng đồng từng chấp nhận gánh nặng trình duyệt này như khoản thuế bắt buộc. Nhưng website không tự sinh dữ liệu trên trình duyệt: frontend của chúng gửi yêu cầu HTTP để lấy JSON thô từ máy chủ nội bộ.
Ngày 27 tháng 9 năm 2026, kỹ sư Charles Zheng phát hành API Anything (goodnight000/api-anything) theo giấy phép MIT để triệt tiêu khoản thuế này. Thay vì bắt agent lái Chrome liên tục, API Anything mở trình duyệt đúng một lần để bắt gói tin mạng, giải mã cấu trúc gán tham số vào slot không cần LLM, rồi lưu bản đặc tả nguyên bản.
Các lần gọi tiếp theo bỏ qua trình duyệt hoàn toàn: agent gửi lệnh Node HTTP trực tiếp trong 120 mili-giây, tiết kiệm 90% token và tự phục hồi khi website nguồn thay đổi.
Tóm tắt (TL;DR)
Hộp Trả Lời Nhanh (Google Search Featured Snippet): API Anything là gì? Bộ runtime TypeScript và máy chủ MCP (chuẩn kết nối công cụ AI / Model Context Protocol) mã nguồn mở, biến website tương tác thành API HTTP tự phục hồi cho AI agent. Công cụ mở trình duyệt một lần bắt gói tin, tự ánh xạ tham số vào tầng URL và JSON không dùng LLM, gọi lại bằng HTTP thuần trong 120 mili-giây và tự kích hoạt trình duyệt sửa lỗi khi giao diện trôi dạt.
Kho lưu trữ chính: goodnight000/api-anything · Giấy phép: MIT · Số sao GitHub: ~1.600+ · Môi trường: Node 22.13+ TypeScript
- Khớp Slot không dùng LLM: Loại bỏ ảo giác prompt. Hệ thống duyệt từng tầng giao thức (URL path, query, form data, JSON lồng chuỗi) để gắn đối số vào slot yêu cầu.
- Tốc độ phản hồi cực nhanh: Chạy qua
fetchgốc của Node trong 100 đến 300 mili-giây, nhanh hơn 90% so với kịch bản Playwright. - Tự phục hồi (Self-Healing): Khớp endpoint qua đặc điểm ổn định (method, host, path wildcard, GraphQL
operationName), lờ đi queryId tạm thời. Khi web đổi, hệ thống bắt lại gói tin một lần rồi cập nhật spec. - Thang vận chuyển 4 tầng: Tự leo thang từ HTTP trực tiếp (Tầng 1) sang chạy JS trong trang (Tầng 2), bắt gói tin trình duyệt (Tầng 3) và mở giao diện người giải CAPTCHA (Tầng 4).
Mô hình tư duy (Beginner Map)
Hãy hình dung API Anything như người phục vụ phòng. Thay vì bắt bạn tự đi cầu thang xuống bếp mỗi sáng gọi món, người phục vụ quan sát bạn gọi điện một lần, ghi nhớ số máy nội bộ và mã món, rồi các lần sau sẽ gọi thẳng vào bếp lấy đồ ăn cho bạn.
Phần 1: Nền tảng (Bẫy trình duyệt và kiến trúc Slot Decoding)
Agent lập trình hiện tốn nhiều tài nguyên khi tương tác web qua Playwright. Mỗi lần tương tác cần mở Chromium, phân tích cây DOM (cấu trúc HTML của trang web / Document Object Model), chờ mạng tải và bóc tách accessibility snapshot.
Điều này tạo ba nút thắt cổ chai:
- Tràn ngập ngữ cảnh LLM: Đọc một trang vé máy bay ngốn 30.000 đến 80.000 token HTML thừa, khiến agent cạn cửa sổ ngữ cảnh sau vài lượt tra cứu.
- Độ trễ vận hành cao: Tải tài nguyên và chạy script web tạo độ trễ 10 đến 30 giây mỗi truy vấn.
- Mỏng manh trước đổi giao diện: Frontend cập nhật class CSS từ
btn-searchsang mã hash Tailwind ngẫu nhiên là kịch bản tự động hóa gãy đổ.
| Thuật ngữ / Khái niệm | Ý nghĩa bỏ túi (3-6 từ) |
|---|---|
| CDP (Chrome DevTools Protocol) | Giao thức điều khiển trình duyệt ngầm |
| WAF (Web Application Firewall) | Tường lửa chặn truy cập bất thường |
| CSRF Token | Mã bảo vệ chống giả mạo request |
| RFC 6901 Pointer | Cú pháp trỏ vị trí JSON lồng nhau |
| Operation Spec | Bản thiết kế lưu mẫu gọi HTTP |
Công cụ trước đây như Unbrowse dùng dịch vụ đảo ngược trên đám mây, tính phí micropayment và lưu cứng mã hash GraphQL (queryId). Khi web đổi hash, Unbrowse hỏng và không thể tự phục hồi.
API Anything chạy hoàn toàn cục bộ. Đột phá nằm ở khớp vị trí cấu trúc (Structural Slot Matching). Bộ phân tích (src/learn.ts) duyệt qua các tầng dữ liệu giải mã:
Cấu trúc phân tầng giải mã:
HTTP Request
├── URL Path Segments -> path:0, path:1
├── Query Parameters -> query:variables
│ └── Decoded JSON -> json:/screen_name (Slot)
├── Form URL-Encoded Body -> form:f.req
│ └── Escaped JSON Str -> json:/1/0/0 (Slot)
└── Custom Auth Headers -> header:x-csrf-token
Đi sâu vào JSON lồng nhau và chuỗi base64, engine tìm chính xác nơi dữ liệu mẫu xuất hiện, thay thế bằng slot tham số hóa và giữ nguyên từng byte định dạng gốc.
Phần 2: Khảo sát (Cách API Anything vận hành)
Yêu cầu môi trường: Node 22.13+. Runtime đóng gói thành CLI kết nối với Claude Code hay Cursor qua MCP.
Bước 1: Kết nối máy chủ MCP
Cài đặt công cụ và kích hoạt các thao tác có sẵn (Google Flights, Goodreads, LinkedIn, Amazon):
# Cài đặt API Anything toàn cục
npm install -g git+https://github.com/goodnight000/api-anything.git
# Đăng ký máy chủ MCP vào Claude Code
claude mcp add api-anything -- api-anything mcp
Agent nhận công cụ dạng api_anything__<site>__<operation> kèm đối số xác thực bằng thư viện Zod.
Bước 2: Dạy thao tác website mới
Chỉ cần cung cấp URL kích hoạt và giá trị mẫu:
# Học thao tác bằng kích hoạt trình duyệt một lần
api-anything learn \
--site "social" \
--op "getUser" \
--trigger "https://example.com/users/{username}" \
--example username="octocat"
Trình duyệt ngầm mở ra, lọc bỏ asset tĩnh và trích xuất phản hồi JSON chứa dữ liệu mẫu vào sites/social.json:
{
"name": "getUser",
"method": "GET",
"url": "https://api.example.com/graphql",
"match": {
"host": "api.example.com",
"path": "/graphql",
"operationName": "UserProfileQuery"
},
"slots": [
{
"param": "username",
"at": ["query:variables", "json:/username"]
},
{
"ref": "cookie:session_token",
"at": ["header:authorization"],
"template": "Bearer {value}"
}
]
}
Khối match bỏ qua mã hash tạm. Khi máy chủ đổi queryId, API Anything vẫn nhận diện endpoint trong lần kích hoạt tự phục hồi.
Bước 3: Tái tạo lệnh gọi qua HTTP thuần
Khi gọi social.getUser(username="torvalds"), runtime (src/execute.ts) gửi lệnh HTTP Tầng 1:
# Agent gọi thao tác trực tiếp từ terminal
api-anything call social getUser username="torvalds"
Hệ thống giải mã đúng tầng chứa username, thay bằng "torvalds", gắn cookie từ session jar cục bộ và gửi Node fetch. Lệnh xong trong 120 mili-giây, trả JSON sạch vào ngữ cảnh của agent.
Phần 3: Chẩn đoán (Góc khuất và cạm bẫy thực địa)
Đưa các lệnh gọi API dịch ngược vào thực tế đòi hỏi hiểu rõ giới hạn và cạm bẫy mạng.
Cộng đồng nhà phát triển trên X nhanh chóng chú ý đến sự khác biệt giữa hai phương pháp:
Thực tế kiểm thử cũng phơi bày các rào cản từ tường lửa bảo vệ:
Cạm bẫy 1: Mã lỗi HTTP 419 giả mạo lỗi Auth (Issue #12)
Một số tường lửa kiểm tra chữ ký bắt tay TLS. Khi Node fetch gửi yêu cầu kèm manual redirect, tường lửa phát hiện client phi trình duyệt và trả về HTTP 419: CSRF check failed.
Bản đầu của API Anything xếp mã 419 vào nhóm lỗi auth (hết phiên đăng nhập). Bậc thang vận chuyển từ chối leo tầng, khiến lệnh thất bại dù trang vẫn mở được trên Chrome. Bản cập nhật mới đã sửa lỗi: với thao tác đọc, mã 419 kích hoạt leo thang lên Tầng 2 (chạy fetch trong tab Chrome thật), vượt qua bẫy vân tay TLS.
Cạm bẫy 2: Xung đột quét secret với cookie lưu URL (Issue #27)
Bộ quét tự động (src/secrets.ts) rà soát payload để chặn việc vô tình lưu cookie phiên nhạy cảm vào Git.
Nhiều trang web lưu URL trang hiện tại vào cookie đo lường (__ps_lu=https%3A%2F%2Fexample.com%2F). Vì URL yêu cầu khớp với domain trang, bộ quét nhận diện nhầm đây là token rò rỉ:
Error: refusing to learn a request that would keep a credential in the spec:
$.request.url holds the live cookie __ps_lu
Bản vá bỏ qua các cookie có giá trị là URL thuần túy không chứa query string, hoặc bạn có thể dùng cờ --public <cookie_name> để bỏ qua thủ công.
Cạm bẫy 3: Nguy cơ tính lặp lại (Idempotency) khi ghi dữ liệu
API Anything tập trung vào thao tác đọc. Nếu thao tác POST thanh toán hay gửi tin nhắn thất bại do chập chờn mạng, cơ chế tự phục hồi không thể tự động phát lại an toàn vì có thể gây trừ tiền hai lần. Do đó, thao tác ghi bắt buộc phải có bước kiểm tra đối chiếu (readback) trước khi xác nhận hoàn thành.
Phần 4: Giải pháp (Ma trận quyết định)
| Bối cảnh vận hành | Dùng API Anything | Giữ Headless Browser |
|---|---|---|
| Tần suất truy vấn | Tra cứu liên tục (vé, tỷ giá, giá hàng) | Duyệt web ngẫu nhiên một lần |
| Ngân sách thời gian | Yêu cầu dưới 300 mili-giây | Chấp nhận chờ 15 đến 45 giây |
| Ngân sách Token | Tiết kiệm token tối đa (cần JSON thô) | Cửa sổ ngữ cảnh đủ lớn nuốt HTML |
| Phòng thủ Anti-Bot | WAF tiêu chuẩn, session cookie | Thử thách gắt gao (Turnstile, DataDome) |
| Loại thao tác | Thao tác đọc và tìm kiếm | Thao tác ghi phá hủy không thể hoàn tác |
Lời khuyên cuối (Final Take)
Đừng bắt AI agent lái đầu kéo trình duyệt nặng nề khi thứ duy nhất nó cần chỉ là gói tin JSON nhẹ hai kilobyte.
Thử thách thực hành (Student First Assignment)
Cài đặt CLI API Anything trên Node 22+ và chạy thử trên máy:
# Clone mã nguồn và chạy test
git clone https://github.com/goodnight000/api-anything.git
cd api-anything
npm install
npm test
Mở sites/goodreads.json xem cách cấu hình slot cho GraphQL, rồi chạy lệnh tra cứu:
npx tsx src/cli.ts call goodreads getBookByTitle title="Piranesi"
Xem kết quả JSON trả về trong 300 mili-giây mà không cần mở bất kỳ cửa sổ trình duyệt nào.
Câu hỏi thường gặp (FAQ)
API Anything có tự vượt Cloudflare hay CAPTCHA không?
Không. Công cụ không tham gia cuộc đua vượt rào chống bot. Khi gặp thử thách như Cloudflare Turnstile, hệ thống trả về blocked. Bạn tự giải trên trình duyệt một lần để lấy cookie phiên, sau đó API Anything dùng cookie đó cho các lệnh HTTP tiếp theo.
API Anything khác gì các thư viện cào web như BeautifulSoup hay Cheerio?
Thư viện truyền thống đọc HTML qua bộ chọn CSS, dễ gãy khi giao diện đổi. API Anything bắt thẳng gói tin JSON ở tầng mạng, nói chuyện trực tiếp với máy chủ backend và bỏ qua hoàn toàn giao diện HTML.
API Anything có dùng được với trang cần đăng nhập không?
Có. Dùng lệnh api-anything login <site> để mở trình duyệt đăng nhập thủ công một lần. Cookie phiên được mã hóa lưu trữ cục bộ và tự động gắn vào tiêu đề của các yêu cầu tiếp theo.
Bài viết liên quan
- AI & Agents
Mổ xẻ CleanYourTV: Dùng Claude Code dọn sạch rác Android TV
Khám phá CleanYourTV: cách Claude Code qua Wi-Fi và ADB gỡ sạch quảng cáo Google TV, thu hồi RAM và cài đặt launcher phong cách Apple TV chỉ 526KB.
14 phút đọcĐọc tiếp → - AI & Agents
OmniRoute Là Gì: Cổng AI Gateway Cục Bộ 290+ LLM & Local MCP
OmniRoute là gì? Hướng dẫn AI gateway chạy local: gom 290+ LLM sau 1 URL, tự động fallback khi dính lỗi HTTP 429, nén token 35% và tích hợp MCP cho Claude Code.
24 phút đọcĐọc tiếp → - AI & Agents
Pi Mono Giải Thích: Anti-Framework Cho AI Coding Agent
Pi Mono là gì? Phân tích monorepo mã nguồn mở của Mario Zechner (badlogic/pi-mono): bộ khung modular tự build AI coding agent với TypeScript extensions.
25 phút đọcĐọc tiếp → - AI & Agents
Giải mã Context Mode: Tối ưu 98% cửa sổ ngữ cảnh cho AI Coding Agent
Khám phá Context Mode, bộ máy MCP ảo hóa ngữ cảnh giảm 98% dữ liệu rác cho AI agent bằng SQLite FTS5 và nguyên lý tư duy bằng code thay vì văn bản.
12 phút đọcĐọc tiếp →