Việc tạo thủ công các lệnh gọi `fetch`, xử lý token xác thực và phân tích phản hồi API cho mỗi tích hợp mới tương đương với việc viết mã assembly cho các ứng dụng web. Các kỹ năng Claude Code để tìm nạp dữ liệu biến các yêu cầu HTTP thành các công cụ khai báo, có thể tái sử dụng, hiểu các mẫu xác thực, phân trang và xác thực phản hồi, loại bỏ mã lặp lại trong khi vẫn đảm bảo tính nhất quán trên toàn bộ cơ sở mã của bạn.
Tại sao kỹ năng mạng API lại quan trọng đối với quy trình phát triển
Mỗi nhà phát triển dành hàng giờ cho các công việc API lặp đi lặp lại: thiết lập tiêu đề cho OAuth 2.0, triển khai thuật toán backoff lũy thừa cho các điểm cuối bị giới hạn tốc độ và viết trình bảo vệ kiểu cho các phản hồi JSON không thể đoán trước. Các tác vụ này dễ gây lỗi và gắn chặt với các dịch vụ cụ thể, khiến chúng khó kiểm tra và bảo trì. Claude Code Skills trừu tượng hóa sự phức tạp này thành các công cụ được kiểm soát phiên bản, có thể kiểm tra mà trợ lý AI của bạn có thể gọi bằng ngôn ngữ tự nhiên.
Sự thay đổi là từ các lệnh gọi API mang tính mệnh lệnh sang tìm nạp dữ liệu mang tính khai báo. Thay vì viết fetch(url, { headers: {...} }), bạn mô tả ý định: “Tìm nạp dữ liệu người dùng từ GitHub API bằng token từ ENV và trả về kết quả đã được gõ kiểu.” Kỹ năng này xử lý việc quản lý thông tin xác thực, logic thử lại và phân tích phản hồi, trả về dữ liệu có kiểu mạnh mẽ mà ứng dụng của bạn có thể sử dụng ngay lập tức.
Bạn muốn một nền tảng tích hợp, tất cả trong một để Đội ngũ Nhà phát triển của bạn làm việc cùng nhau với năng suất tối đa?
Apidog đáp ứng tất cả các yêu cầu của bạn và thay thế Postman với mức giá phải chăng hơn nhiều!
Thiết lập kỹ năng tìm nạp dữ liệu trong Claude Code
Bước 1: Cài đặt Claude Code và cấu hình MCP
Nếu bạn chưa cài đặt Claude Code CLI:
npm install -g @anthropic-ai/claude-code
claude --version # Nên hiển thị >= 2.0.70
Tạo thư mục và tệp cấu hình MCP:
# macOS/Linux
mkdir -p ~/.config/claude-code
touch ~/.config/claude-code/config.json
# Windows
mkdir %APPDATA%\claude-code
echo {} > %APPDATA%\claude-code\config.json

Bước 2: Clone và Build kỹ năng tìm nạp dữ liệu
Kỹ năng tìm nạp dữ liệu chính thức cung cấp các mẫu cho yêu cầu REST, GraphQL và HTTP chung.
git clone https://github.com/anthropics/skills.git
cd skills/skills/data-fetching
npm install
npm run build
Thao tác này biên dịch các trình xử lý TypeScript thành dist/index.js.
Bước 3: Cấu hình MCP để tải kỹ năng
Chỉnh sửa ~/.config/claude-code/config.json:
{
"mcpServers": {
"data-fetching": {
"command": "node",
"args": ["/absolute/path/to/skills/data-fetching/dist/index.js"],
"env": {
"DEFAULT_TIMEOUT": "30000",
"MAX_RETRIES": "3",
"RATE_LIMIT_PER_MINUTE": "60",
"CREDENTIALS_STORE": "~/.claude-credentials.json"
}
}
}
}
Quan trọng:
- Sử dụng đường dẫn tuyệt đối cho
args - Cấu hình biến môi trường:
DEFAULT_TIMEOUT: Thời gian chờ yêu cầu tính bằng mili giâyMAX_RETRIES: Số lần thử lại cho các lỗi 5xxRATE_LIMIT_PER_MINUTE: Ngưỡng điều tiếtCREDENTIALS_STORE: Đường dẫn đến tệp thông tin xác thực được mã hóa

Bước 4: Thiết lập kho lưu trữ thông tin xác thực
Tạo tệp thông tin xác thực để tránh mã hóa cứng token:
# Tạo kho lưu trữ thông tin xác thực được mã hóa
mkdir -p ~/.claude
echo '{}' > ~/.claude/credentials.json
chmod 600 ~/.claude/credentials.json
Thêm token API của bạn:
{
"github": {
"token": "ghp_your_github_token_here",
"baseUrl": "https://api.github.com"
},
"slack": {
"token": "xoxb-your-slack-token",
"baseUrl": "https://slack.com/api"
},
"custom-api": {
"token": "Bearer your-jwt-token",
"baseUrl": "https://api.yourcompany.com",
"headers": {
"X-API-Version": "v2"
}
}
}
Kỹ năng này đọc tệp này khi khởi động và chèn thông tin xác thực vào các yêu cầu.
Bước 5: Xác minh cài đặt
claude
Sau khi tải, chạy:
/list-tools
Bạn sẽ thấy:
Available tools:
- data-fetching:rest-get
- data-fetching:rest-post
- data-fetching:rest-put
- data-fetching:rest-delete
- data-fetching:graphql-query
- data-fetching:graphql-mutation
- data-fetching:raw-http
Các mẫu yêu cầu API cốt lõi
1. Yêu cầu GET RESTful
Công cụ: data-fetching:rest-get
Trường hợp sử dụng: Tìm nạp dữ liệu từ các điểm cuối REST với xác thực, phân trang và lưu vào bộ nhớ cache
Tham số:
service: Khóa khớp với kho lưu trữ thông tin xác thực (github, slack, custom-api)endpoint: Đường dẫn API (ví dụ:/users,/repos/owner/name)params: Đối tượng tham số truy vấncache: TTL tính bằng giây (tùy chọn)transform: Biểu thức JMESPath để chuyển đổi phản hồi
Ví dụ: Tìm nạp kho lưu trữ của người dùng GitHub
Sử dụng rest-get để tìm nạp các kho lưu trữ cho người dùng "anthropics" từ GitHub API, bao gồm phân trang 100 mục mỗi trang và chỉ trả về tên, mô tả và số lượng stargazers.
Thực thi được tạo:
// Trình xử lý thực thi:
const response = await fetch('https://api.github.com/users/anthropics/repos', {
headers: {
'Authorization': 'token ghp_your_github_token_here',
'Accept': 'application/vnd.github.v3+json'
},
params: {
per_page: 100,
page: 1
}
});
// Chuyển đổi với JMESPath
const transformed = jmespath.search(response, '[*].{name: name, description: description, stars: stargazers_count}');
return transformed;
Cách sử dụng Claude Code:
claude --skill data-fetching \
--tool rest-get \
--params '{"service": "github", "endpoint": "/users/anthropics/repos", "params": {"per_page": 100}, "transform": "[*].{name: name, description: description, stars: stargazers_count}"}'
2. Yêu cầu POST/PUT/DELETE
Công cụ: data-fetching:rest-post / rest-put / rest-delete
Trường hợp sử dụng: Tạo, cập nhật hoặc xóa tài nguyên
Tham số:
service: Khóa kho lưu trữ thông tin xác thựcendpoint: Đường dẫn APIbody: Tải trọng yêu cầu (đối tượng hoặc chuỗi JSON)headers: Các tiêu đề bổ sungidempotencyKey: Để đảm bảo an toàn khi thử lại
Ví dụ: Tạo một issue trên GitHub
Sử dụng rest-post để tạo một issue trong kho anthorpics/claude với tiêu đề "Feature Request: MCP Tool Caching", phần thân chứa mô tả và các nhãn ["enhancement", "mcp"].
Thực thi:
await fetch('https://api.github.com/repos/anthropics/claude/issues', {
method: 'POST',
headers: {
'Authorization': 'token ghp_...',
'Content-Type': 'application/json'
},
body: JSON.stringify({
title: "Feature Request: MCP Tool Caching",
body: "Description of the feature...",
labels: ["enhancement", "mcp"]
})
});
3. Truy vấn GraphQL
Công cụ: data-fetching:graphql-query
Trường hợp sử dụng: Tìm nạp dữ liệu phức tạp với các mối quan hệ lồng nhau
Tham số:
service: Khóa kho lưu trữ thông tin xác thựcquery: Chuỗi truy vấn GraphQLvariables: Đối tượng biến truy vấnoperationName: Tên hoạt động
Ví dụ: Tìm nạp các issue của kho lưu trữ kèm bình luận
Sử dụng graphql-query để tìm nạp 10 issue mở gần đây nhất từ kho anthorpics/skills, bao gồm tiêu đề, tác giả, số lượng bình luận và nhãn.
query RecentIssues($owner: String!, $repo: String!, $limit: Int!) {
repository(owner: $owner, name: $repo) {
issues(first: $limit, states: [OPEN], orderBy: {field: CREATED_AT, direction: DESC}) {
nodes {
title
author { login }
comments { totalCount }
labels(first: 5) { nodes { name } }
}
}
}
}
Tham số:
{
"service": "github",
"query": "query RecentIssues($owner: String!, $repo: String!, $limit: Int!) { ... }",
"variables": {
"owner": "anthropics",
"repo": "skills",
"limit": 10
}
}
4. Yêu cầu HTTP thô
Công cụ: data-fetching:raw-http
Trường hợp sử dụng: Các trường hợp đặc biệt không được bao gồm bởi các công cụ REST/GraphQL
Tham số:
url: URL đầy đủmethod: Phương thức HTTPheaders: Đối tượng tiêu đềbody: Phần thân yêu cầutimeout: Ghi đè thời gian chờ mặc định
Ví dụ: Gửi webhook với các tiêu đề tùy chỉnh
Sử dụng raw-http để POST đến https://hooks.slack.com/services/YOUR/WEBHOOK/URL với tải trọng JSON chứa {text: "Deployment complete"}, và tiêu đề tùy chỉnh X-Event: deployment-success.
Các kịch bản mạng nâng cao
Xử lý phân trang
Kỹ năng này tự động phát hiện các mẫu phân trang:
// Phân tích tiêu đề GitHub Link
const linkHeader = response.headers.get('Link');
if (linkHeader) {
const nextUrl = parseLinkHeader(linkHeader).next;
if (nextUrl && currentPage < maxPages) {
return {
data: currentData,
nextPage: currentPage + 1,
hasMore: true
};
}
}
Yêu cầu tất cả các trang:
Sử dụng rest-get để tìm nạp tất cả các kho lưu trữ cho người dùng "anthropics", tự động xử lý phân trang cho đến khi không còn trang nào.
Kỹ năng này trả về một mảng phẳng của tất cả các kết quả.
Giới hạn tốc độ và logic thử lại
Cấu hình hành vi thử lại cho mỗi yêu cầu:
{
"service": "github",
"endpoint": "/rate_limit",
"maxRetries": 5,
"retryDelay": "exponential",
"retryOn": [429, 500, 502, 503, 504]
}
Kỹ năng này triển khai thuật toán backoff lũy thừa với jitter:
const delay = Math.min(
(2 ** attempt) * 1000 + Math.random() * 1000,
30000
);
await new Promise(resolve => setTimeout(resolve, delay));
Quản lý yêu cầu đồng thời
Thực hiện hàng loạt các lệnh gọi API một cách hiệu quả:
Sử dụng rest-get để tìm nạp chi tiết cho các kho lưu trữ: ["claude", "skills", "anthropic-sdk"], thực thi các yêu cầu đồng thời với tối đa 3 kết nối song song.
Kỹ năng này sử dụng p-limit để điều tiết tính đồng thời:
import pLimit from 'p-limit';
const limit = pLimit(3); // Tối đa 3 đồng thời
const results = await Promise.all(
repos.map(repo =>
limit(() => fetchRepoDetails(repo))
)
);
Chặn và giả lập yêu cầu
Để kiểm thử, chặn các yêu cầu mà không cần truy cập API thực:
// Trong cấu hình kỹ năng
"env": {
"MOCK_MODE": "true",
"MOCK_FIXTURES_DIR": "./test/fixtures"
}
Bây giờ các yêu cầu trả về dữ liệu giả lập từ các tệp JSON:
// test/fixtures/github/repos/anthropics.json
[
{"name": "claude", "description": "Trợ lý AI", "stars": 5000}
]
Ứng dụng thực tế: Xây dựng Bảng điều khiển GitHub
Bước 1: Tìm nạp dữ liệu kho lưu trữ
Sử dụng rest-get để tìm nạp tất cả các kho lưu trữ từ GitHub cho tổ chức "anthropics", bao gồm mô tả đầy đủ, số sao, số fork và số lượng issue đang mở. Lưu kết quả vào bộ nhớ đệm trong 5 phút.
Bước 2: Làm phong phú dữ liệu với thông tin người đóng góp
Đối với mỗi kho lưu trữ, tìm nạp những người đóng góp hàng đầu:
Sử dụng rest-get để tìm nạp thống kê người đóng góp cho kho lưu trữ "anthropics/claude", giới hạn 10 người đóng góp hàng đầu và trích xuất thông tin đăng nhập và số lượng đóng góp.
Bước 3: Tạo thống kê tóm tắt
Kết hợp dữ liệu trong Claude Code:
const repos = await fetchAllRepos('anthropics');
const enrichedRepos = await Promise.all(
repos.map(async (repo) => {
const contributors = await fetchTopContributors('anthropics', repo.name);
return { ...repo, topContributors: contributors };
})
);
return {
totalStars: enrichedRepos.reduce((sum, r) => sum + r.stars, 0),
totalForks: enrichedRepos.reduce((sum, r) => sum + r.forks, 0),
repositories: enrichedRepos
};
Bước 4: Xuất bản bảng điều khiển
Sử dụng rest-post để tạo một trang web GitHub Pages với dữ liệu bảng điều khiển bằng cách sử dụng GitHub API để commit vào nhánh gh-pages.
Xử lý lỗi và khả năng phục hồi
Kỹ năng này phân loại lỗi để xử lý thích hợp:
// Lỗi 4xx: Lỗi máy khách
if (response.status >= 400 && response.status < 500) {
throw new SkillError('client_error', `Yêu cầu không hợp lệ: ${response.status}`, {
statusCode: response.status,
details: await response.text()
});
}
// Lỗi 5xx: Lỗi máy chủ (có thể thử lại)
if (response.status >= 500) {
throw new SkillError('server_error', `Lỗi máy chủ: ${response.status}`, {
retryable: true,
statusCode: response.status
});
}
// Lỗi mạng: Lỗi kết nối
if (error.code === 'ECONNREFUSED' || error.code === 'ETIMEDOUT') {
throw new SkillError('network_error', 'Mạng không thể truy cập', {
retryable: true,
originalError: error.message
});
}
Claude Code nhận các lỗi có cấu trúc và có thể quyết định thử lại, hủy bỏ hoặc yêu cầu người dùng can thiệp.
Kết luận
Claude Code Skills dành cho mạng API biến các yêu cầu HTTP ngẫu hứng thành các công cụ tìm nạp dữ liệu đáng tin cậy, an toàn kiểu và có thể quan sát được. Bằng cách tập trung quản lý thông tin xác thực, triển khai các lần thử lại thông minh và cung cấp khả năng xử lý lỗi có cấu trúc, bạn loại bỏ các nguồn lỗi tích hợp API phổ biến nhất. Bắt đầu với bốn công cụ cốt lõi—rest-get, rest-post, graphql-query và raw-http—sau đó mở rộng chúng cho các trường hợp sử dụng cụ thể của bạn. Đầu tư vào cấu hình kỹ năng mang lại lợi ích ngay lập tức về tính nhất quán của mã và tốc độ phát triển.
Khi các kỹ năng tìm nạp dữ liệu của bạn tương tác với các API nội bộ, hãy xác thực các điểm cuối đó bằng Apidog để đảm bảo các tích hợp dựa trên AI của bạn sử dụng các hợp đồng đáng tin cậy.
