Một trong những nhiệm vụ quan trọng nhất là lấy dữ liệu từ các máy chủ. Quá trình này, liên quan đến việc gửi yêu cầu và nhận phản hồi, là xương sống của hầu hết các ứng dụng web hiện đại. Bài viết này cung cấp hướng dẫn toàn diện về việc lấy dữ liệu với body và header, hai thành phần thiết yếu của bất kỳ yêu cầu HTTP nào. Cho dù bạn là một nhà phát triển dày dạn kinh nghiệm hay một người mới bắt đầu, hướng dẫn này sẽ trang bị cho bạn kiến thức và kỹ năng cần thiết để lấy dữ liệu hiệu quả trong các ứng dụng của bạn. Hãy cùng đi sâu vào nhé!
Hiểu về Fetch
Hàm fetch()
là một công cụ mạnh mẽ trong JavaScript để thực hiện các yêu cầu mạng. Dưới đây là lý do tại sao bạn có thể muốn sử dụng nó và cách sử dụng:
- Các hoạt động không đồng bộ:
fetch()
cho phép bạn thực hiện các cuộc gọi AJAX không đồng bộ. Điều này có nghĩa là bạn có thể yêu cầu dữ liệu từ một API mà không làm ngừng việc thực hiện các lệnh khác. Các hàm khác trên trang web của bạn sẽ tiếp tục chạy ngay cả khi một cuộc gọi API chưa được giải quyết. - Chạy dựa trên Promise: Khác với XMLHttpRequest, vốn dựa trên callback, Fetch chạy dựa trên promise, làm cho nó dễ sử dụng và quản lý hơn trong các ứng dụng JavaScript hiện đại.
- Đa năng: Fetch có thể được sử dụng cho nhiều loại yêu cầu khác nhau (GET, POST, PUT, DELETE, v.v.) và định dạng dữ liệu.
Dưới đây là một ví dụ cơ bản về cách sử dụng fetch()
để thực hiện một yêu cầu GET:
fetch('https://example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Lỗi:', error));
Trong ví dụ này, fetch()
được gọi với URL của tài nguyên mà bạn muốn lấy. Hàm này trả về một Promise được giải quyết thành Phản hồi cho yêu cầu đó, cho dù nó thành công hay không. Sau đó, bạn có thể sử dụng phương thức .json()
để phân tích dữ liệu phản hồi dưới dạng JSON.

Sử dụng Fetch với Body và Header
Khi sử dụng Fetch API trong JavaScript, bạn có thể bao gồm các header và một body trong yêu cầu GET của mình. Tuy nhiên, điều quan trọng cần lưu ý là theo thông số kỹ thuật HTTP/1.1, một yêu cầu GET không nên bao gồm body. Mặc dù một số máy chủ có thể chấp nhận nó, nhưng một số khác có thể từ chối hoặc bỏ qua nó.
Dưới đây là ví dụ về cách bạn có thể cấu trúc một yêu cầu fetch với các header:
fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_TOKEN_HERE'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch((error) => {
console.error('Lỗi:', error);
});
Trong ví dụ này, chúng tôi đang gửi một yêu cầu GET đến ‘https://api.example.com/data’. Chúng tôi bao gồm hai header: ‘Content-Type’ và ‘Authorization’. Header ‘Content-Type’ cho biết rằng chúng tôi đang gửi dữ liệu JSON. Header ‘Authorization’ bao gồm một bearer token để xác thực.
Nếu bạn muốn bao gồm một body trong yêu cầu fetch của mình, bạn có thể muốn sử dụng một phương thức HTTP khác, chẳng hạn như POST. Đây là một ví dụ:
fetch('https://api.example.com/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_TOKEN_HERE'
},
body: JSON.stringify({
key1: 'value1',
key2: 'value2'
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch((error) => {
console.error('Lỗi:', error);
});
Trong ví dụ này, chúng tôi đang gửi một yêu cầu POST thay vì một yêu cầu GET. Chúng tôi bao gồm các header giống nhau, nhưng chúng tôi cũng bao gồm một body. Body là một chuỗi JSON đại diện cho một đối tượng JavaScript.

Cách gửi yêu cầu GET với Body và Header bằng Apidog
Apidog là một công cụ mạnh mẽ giúp bạn gửi yêu cầu GET với các tham số body và header dễ dàng hơn.
Với header:
Mở Apidog và nhấp vào nút Yêu cầu mới.

Nhập URL của điểm cuối API mà bạn muốn gửi yêu cầu GET đến, sau đó nhấp vào tab Headers và chọn tùy chọn mà bạn muốn. Trong ví dụ này, chúng tôi đang chọn Authorization.

Thêm thông tin xác thực của bạn (dữ liệu thực cần thiết để xác minh máy chủ, ví dụ: tên người dùng/mật khẩu, token, hash)

Gửi yêu cầu và phân tích phản hồi.

Apidog giúp bạn dễ dàng làm việc với các header xác thực, vì vậy bạn có thể tự tin kiểm tra các API của mình!
Với Body:
Kiểm tra các yêu cầu GET với body có thể hơi phức tạp vì thông số kỹ thuật HTTP truyền thống coi các yêu cầu GET là idempotent (có nghĩa là chúng không làm thay đổi trạng thái của máy chủ). Tuy nhiên, một số API có thể cho phép hành vi tùy biến, nơi bạn có thể bao gồm một body yêu cầu ngay cả trong các yêu cầu GET.
Chuyển sang tab “Body” và chọn thông số kỹ thuật body mà bạn muốn thêm.

Gửi yêu cầu và xác minh rằng mã trạng thái phản hồi là ok.

Nhớ rằng trong khi việc kiểm tra các yêu cầu GET với body có thể không phổ biến, điều quan trọng là phải hiểu hành vi của API của bạn và đảm bảo thử nghiệm kỹ lưỡng cho tất cả các tình huống. Apidog có thể đơn giản hóa quá trình này bằng cách cung cấp các công cụ thiết kế, gỡ lỗi và kiểm tra API.
Sử dụng Apidog để tự động tạo mã Fetch
Apidog cũng cho phép bạn tự động tạo mã Fetch để thực hiện các yêu cầu HTTP. Dưới đây là cách sử dụng Apidog để tạo mã Fetch:
- Nhập bất kỳ header hoặc tham số chuỗi truy vấn nào mà bạn muốn gửi cùng yêu cầu, sau đó nhấp vào nút Tạo mã.

2. Sao chép mã Fetch được tạo và dán vào dự án của bạn.

Các thực hành tốt nhất cho các yêu cầu Fetch với body và headers
Dưới đây là một số thực hành tốt nhất cho việc sử dụng Fetch API với body và headers:
- Sử dụng Promises: Fetch API được xây dựng trên các Promises, mang lại kiểm soát tốt hơn đối với các hoạt động không đồng bộ. Promises cho phép xử lý lỗi đơn giản hơn, tránh việc cần callback hoặc quản lý listeners sự kiện.
- Cú pháp đơn giản hơn: So với XMLHttpRequest, Fetch API cung cấp cú pháp hiện đại và trực quan hơn. Nó sử dụng cách tiếp cận dựa trên promise đơn giản, cho phép các nhà phát triển kết nối các phương thức và xử lý phản hồi bằng async/await, dẫn đến mã sạch hơn và dễ đọc hơn.
- Quản lý phản hồi được tinh giản: Fetch API trả về một đối tượng Response cung cấp các phương thức tiện dụng để truy cập dữ liệu phản hồi, bao gồm phân tích JSON, trích xuất văn bản, và đọc các header phản hồi. Nó đơn giản hóa quá trình trích xuất và thao tác dữ liệu từ phản hồi.
- Hỗ trợ Cross-Origin Resource Sharing (CORS): Fetch API xử lý Cross-Origin Resource Sharing (CORS) một cách minh bạch hơn.
- Xử lý Lỗi: Luôn bao gồm xử lý lỗi trong các yêu cầu fetch của bạn. Bạn có thể sử dụng
.catch()
để xử lý bất kỳ lỗi nào có thể xảy ra trong quá trình thực hiện fetch. - Headers: Khi thực hiện một yêu cầu POST, điều quan trọng là phải đặt header
Content-Type
thànhapplication/json
nếu bạn đang gửi dữ liệu JSON. Điều này cho phép máy chủ biết loại dữ liệu nào mong đợi. - Body: Đối với yêu cầu POST, bạn có thể sử dụng thuộc tính
body
để truyền một chuỗi JSON như đầu vào. Lưu ý rằng body yêu cầu nên là một chuỗi JSON trong khi các header nên là một đối tượng JSON. - Chuỗi hóa dữ liệu JSON của bạn: Đảm bảo bạn chuỗi hóa dữ liệu JSON của mình trước khi gửi nó đến máy chủ. Điều này chuyển đổi đối tượng JavaScript thành một chuỗi, có thể được gửi qua mạng.
Kết luận
Tóm lại, quá trình lấy dữ liệu với body và header là một khía cạnh quan trọng của phát triển web hiện đại. Hướng dẫn toàn diện này đã cung cấp một cái nhìn sâu sắc về các phương pháp, kỹ thuật và thực hành tốt nhất liên quan đến quá trình này. Chúng ta đã khám phá cách cấu trúc các yêu cầu, tầm quan trọng của các header trong việc truyền tải siêu dữ liệu và vai trò của body trong việc truyền tải dữ liệu thực tế. Hiểu những khái niệm này là chìa khóa để xây dựng các ứng dụng hiệu quả, an toàn và mạnh mẽ. Khi công nghệ tiếp tục phát triển, các phương pháp chúng ta sử dụng để lấy dữ liệu cũng sẽ thay đổi. Tuy nhiên, các nguyên tắc được nêu trong hướng dẫn này sẽ vẫn là một phần cơ bản của bối cảnh luôn thay đổi này. Chúc bạn lập trình vui vẻ!