Hoàn thành bài "Bài 1: Giới thiệu về n8n và tư duy tích hợp" trước để mở khoá bài này.Đến bài trước

Giới thiệu

Node HTTP Request là con dao đa năng của n8n. Bất cứ khi nào không có tích hợp sẵn cho dịch vụ bạn cần, node này cho phép bạn gọi trực tiếp bất kỳ REST API nào — GET, POST, PUT, PATCH, DELETE, tất cả đều được. Khi phản hồi trả về, n8n cung cấp cho bạn toàn bộ payload JSON, và bạn dùng biểu thức để lấy ra chính xác các trường bạn quan tâm.

Bài học này sẽ đi qua toàn bộ chu trình: cấu hình node, gửi request, đọc cấu trúc phản hồi và nối các giá trị cụ thể vào bước tiếp theo của workflow.

Cấu hình node HTTP Request

Thêm một node HTTP Request vào canvas, sau đó điền ba thứ trước tiên: phương thức HTTP, URL và xác thực (nếu API yêu cầu).

Với một endpoint công khai không cần xác thực, một GET tối thiểu trông như sau trong trường biểu thức URL của n8n:

javascript
https://api.open-meteo.com/v1/forecast?latitude=51.5&longitude=-0.1&current_weather=true

Đối với API yêu cầu key, vào phần Authentication, chọn Header Auth và đặt tên header (thường là Authorization) cùng giá trị (thường là Bearer YOUR_TOKEN). Bạn có thể lưu token trong một Credential của n8n để không bao giờ phải hard-code trong node.

Khi cần gửi một body JSON — cho một request POST tạo tài nguyên — hãy đặt Body Content Type là JSON và viết payload trong trường Body:

json
{
"name": "{{ $json.customerName }}",
"email": "{{ $json.customerEmail }}"
}

Cú pháp hai dấu ngoặc nhọn là biểu thức của n8n, lấy giá trị từ output của node trước đó tại thời điểm chạy.

lưu đồ thể hiện các bước cấu hình node HTTP Request: Method → URL → Authentication → Body → Execute

Đọc cấu trúc Response

Sau khi bạn nhấn Execute Node, n8n hiển thị response trong panel Output bên phải. Mỗi response sẽ thể hiện ba thành phần: status code, headers và body. Theo mặc định, n8n tự động parse body JSON và trả về dưới dạng dữ liệu có cấu trúc mà bạn có thể duyệt qua.

Giả sử Open-Meteo API trả về như sau:

json
{
"latitude": 51.5,
"longitude": -0.1,
"current_weather": {
"temperature": 14.2,
"windspeed": 11.3,
"weathercode": 3
}
}

Trong panel Output, bạn có thể nhấp vào cây để xem từng trường lồng nhau. Bước khám phá này rất quan trọng — hãy thực hiện trước khi viết bất kỳ expression nào, để bạn biết chính xác đường dẫn key.

Nếu API trả về response không phải JSON (plain text, XML), hãy bật tùy chọn Return Full Response và đổi Response Format sang Text, sau đó xử lý việc parse thủ công trong node Code ở phía sau.

Trích xuất dữ liệu bằng Expressions

Khi đã biết cấu trúc, bạn tham chiếu đến các trường bằng cú pháp expression của n8n trong bất kỳ node nào phía sau. Gốc của output HTTP Request luôn có thể truy cập qua tên node.

Để lấy giá trị nhiệt độ từ ví dụ trên trong node tiếp theo:

javascript
{{ $node["HTTP Request"].json["current_weather"]["temperature"] }}

Hoặc, nếu bạn đang ở trong node ngay sau nó (implicit previous node), hãy dùng dạng rút gọn:

javascript
{{ $json["current_weather"]["temperature"] }}

Khi API trả về một mảng — ví dụ danh sách đơn hàng — body của response chính là mảng đó, hoặc được lồng dưới một key như data. Để lặp qua nó, hãy kết nối node HTTP Request với node Split In Batches hoặc dùng node Item Lists được thiết lập thành Split Out Items, sau đó mỗi lần thực thi phía sau sẽ nhận một item tại một thời điểm.

Đây là cách bạn tham chiếu trực tiếp đến trường id của phần tử thứ ba mà không cần tách (đánh chỉ số từ 0):

javascript
{{ $json["data"][2]["id"] }}
sơ đồ hiển thị cây phản hồi JSON ở bên trái với các mũi tên ánh xạ đến các tham chiếu biểu thức ở bên phải

Những lỗi thường gặp

Thiếu header Content-Type là vấn đề phổ biến nhất khi POST dữ liệu. Nếu bạn đặt Body Content Type là JSON, n8n sẽ tự động thêm header. Nếu bạn chuyển sang Raw, hãy thêm thủ công header: Content-Type với giá trị application/json.

Một lỗi phổ biến khác là cố gắng tham chiếu một trường nằm sâu hơn một cấp so với dự kiến. Luôn sử dụng panel Output để xác minh đường dẫn chính xác trước khi viết biểu thức — những giả định về cấu trúc phản hồi API thường sai nhiều hơn là đúng.

Giới hạn tốc độ (Rate limiting) là vấn đề thứ ba. Nếu workflow của bạn chạy thường xuyên với cùng một API, hãy thêm node Wait giữa các lần lặp và kiểm tra tài liệu API để biết các header giới hạn tốc độ (Retry-After, X-RateLimit-Remaining). n8n không tự động xử lý việc giới hạn tốc độ.

Tóm tắt

Node HTTP Request bao gồm ba bước: thiết lập method và URL, xác thực nếu cần, và gửi body tùy chọn. Sau khi thực thi, sử dụng panel Output để khám phá cây phản hồi, sau đó tham chiếu các trường cụ thể trong các node phía sau bằng cách dùng biểu thức với cú pháp rút gọn $json hoặc $node["NodeName"].json để truy cập chéo giữa các node. Đối với phản hồi dạng mảng, hãy tách các item trước khi xử lý riêng lẻ. Làm quen với quy trình này sẽ mở ra khả năng tích hợp với hầu như bất kỳ REST API nào trong n8n.

Luyện tập sau buổi học

Bài kiểm tra cuối bài

Ôn lại kiến thức, thử sức và nhận góp ý cho bài làm.

0/7
01Biểu thức rút gọn nào đúng để truy cập trường có tên 'status' từ phản hồi JSON của node HTTP Request ngay trước đó?
02Khi gửi một yêu cầu POST với body dạng JSON trong node HTTP Request của n8n, cần cấu hình thiết lập nào để n8n tự động thêm đúng header Content-Type?
03Bạn nhận được một phản hồi API trong đó dữ liệu được lồng theo cấu trúc response.orders[0].id. Biểu thức nào sau đây truy xuất đúng giá trị đó trong một node phía sau?
04Một API trả về danh sách 50 sản phẩm trong một mảng JSON dưới khoá 'items'. Bạn muốn xử lý từng sản phẩm riêng biệt trong các node phía sau. Phương pháp được khuyến nghị trong n8n là gì?
05Đâu là nơi tốt nhất để khám phá chính xác đường dẫn key của response API trước khi viết các biểu thức tham chiếu đến nó?
06Bạn muốn truyền một API token được lưu trong Credential của n8n dưới dạng Bearer token. Phương pháp xác thực nào trong node HTTP Request được thiết kế cho mục đích này?
07n8n tự động xử lý giới hạn tốc độ API khi bạn chạy workflow có gọi liên tục cùng một endpoint.
Đã trả lời · 0/7
Bài 2: Tạo HTTP Request và đọc phản hồi API