Apidog

Nền tảng phát triển API hợp tác tất cả trong một

Thiết kế API

Tài liệu API

Gỡ lỗi API

Giả lập API

Kiểm thử API tự động

NDJSON 101: Truyền tải qua các điểm cuối HTTP

中村 拓也

中村 拓也

Updated on tháng 3 18, 2025

Trong thế giới mà dữ liệu đang được dẫn dắt bởi các thông tin, việc truyền tải hiệu quả các bộ dữ liệu lớn giữa các hệ thống là rất quan trọng. Mặc dù JSON đã trở thành định dạng tiêu chuẩn cho việc trao đổi dữ liệu, nhưng nó gặp phải những hạn chế khi xử lý khối lượng dữ liệu lớn hoặc trong các kịch bản streaming. Đó là lý do NDJSON (Newline Delimited JSON) ra đời – một định dạng đơn giản mà mạnh mẽ đang cách mạng hóa cách chúng ta truyền tải dữ liệu qua các kết nối HTTP. Trong bài viết này, chúng ta sẽ khám phá NDJSON là gì, sự khác biệt giữa nó và JSON tiêu chuẩn, và cách Apidog có thể giúp bạn làm việc với các điểm cuối streaming NDJSON.

💡
Mẹo Chuyên Nghiệp: Kiểm tra các điểm cuối streaming NDJSON một cách dễ dàng với tính năng trực quan thời gian thực của Apidog. Khác với các công cụ truyền thống, Apidog hiển thị từng đối tượng JSON khi nó đến, giúp bạn kiểm tra dữ liệu streaming ngay lập tức—hoàn hảo cho việc gỡ lỗi các bộ dữ liệu lớn mà không cần viết mã phân tích tùy chỉnh.
button

NDJSON là gì?

NDJSON (Newline Delimited JSON) là một định dạng lưu trữ dữ liệu có cấu trúc dưới dạng một chuỗi các đối tượng JSON, với mỗi đối tượng trên một dòng riêng biệt, được phân tách bằng ký tự newline (\n). Nó cũng được biết đến với tên gọi là JSON Lines (JSONL) trong một số ngữ cảnh.

Đây là một ví dụ đơn giản về NDJSON:

{"id": 1, "name": "Alice", "score": 95}
{"id": 2, "name": "Bob", "score": 87}
{"id": 3, "name": "Charlie", "score": 92}

Mỗi dòng đều là một đối tượng JSON hợp lệ, hoàn chỉnh, giúp dễ dàng xử lý một bản ghi tại một thời điểm mà không cần tải toàn bộ bộ dữ liệu vào bộ nhớ.

NDJSON so với JSON Truyền Thống: Những Điểm Khác Biệt Chính

JSON truyền thống và NDJSON phục vụ những mục đích khác nhau và có những đặc điểm riêng biệt:

Tính năng JSON Truyền Thống NDJSON
Cấu trúc Tài liệu duy nhất, hoàn chỉnh Nhiều đối tượng JSON độc lập
Phân tích Phải tải toàn bộ tài liệu Có thể xử lý từng dòng một
Streaming Không được thiết kế cho streaming Thích hợp cho streaming
Sử dụng bộ nhớ Cần toàn bộ tài liệu trong bộ nhớ Xử lý từng dòng một
Kích thước tệp Bị giới hạn bởi bộ nhớ khả dụng Về cơ bản là không giới hạn

Ưu điểm chủ yếu của NDJSON là khả năng xử lý theo từng phần. Với JSON truyền thống, bạn cần phải phân tích toàn bộ tệp trước khi truy cập bất kỳ dữ liệu nào. Với NDJSON, bạn có thể đọc và xử lý từng dòng một, rất lý tưởng cho:

  • Tệp nhật ký
  • Dữ liệu streaming
  • Các bộ dữ liệu lớn
  • Xử lý dữ liệu thời gian thực

Tại sao nên sử dụng NDJSON cho Streaming HTTP?

Streaming HTTP cho phép các máy chủ gửi dữ liệu cho các khách hàng theo từng phần thay vì chờ toàn bộ phản hồi được chuẩn bị. NDJSON đặc biệt phù hợp cho streaming HTTP vì:

  1. Simplicity: Mỗi dòng là một đối tượng JSON hoàn chỉnh, hợp lệ
  2. Compatibility: Làm việc với các bộ parser JSON hiện có
  3. Xử lý Từng Phần: Khách hàng có thể xử lý dữ liệu khi nó đến
  4. Hiệu quả bộ nhớ: Không cần lưu trữ toàn bộ phản hồi
  5. Khả năng đọc cho con người: Dễ dàng kiểm tra và gỡ lỗi

Cách Streaming NDJSON Qua Các Điểm Cuối HTTP

Thực hiện streaming NDJSON qua HTTP rất đơn giản. Dưới đây là cách hoạt động trên cả hai phía máy chủ và máy khách:

Triển Khai Bên Máy Chủ

Để tạo một điểm cuối HTTP để streaming NDJSON:

Đặt các tiêu đề thích hợp:

Content-Type: application/x-ndjson
Transfer-Encoding: chunked

Ghi từng đối tượng JSON vào luồng phản hồi, sau đó là một ký tự newline:

// Ví dụ Node.js
app.get('/api/data/stream', (req, res) => {
  res.setHeader('Content-Type', 'application/x-ndjson');
  res.setHeader('Transfer-Encoding', 'chunked');
  
  // Stream dữ liệu khi có sẵn
  dataSource.on('data', (item) => {
    res.write(JSON.stringify(item) + '\n');
  });
  
  dataSource.on('end', () => {
    res.end();
  });
});

Xử Lý Bên Máy Khách

Ở phía máy khách, bạn cần:

  1. Thực hiện một yêu cầu HTTP đến điểm cuối streaming
  2. Xử lý phản hồi theo từng phần, từng dòng một
  3. Phân tích từng dòng như một đối tượng JSON

Dưới đây là một ví dụ JavaScript đơn giản:

async function consumeNdjsonStream(url) {
  const response = await fetch(url);
  const reader = response.body.getReader();
  const decoder = new TextDecoder();
  let buffer = '';
  
  while (true) {
    const { value, done } = await reader.read();
    if (done) break;
    
    buffer += decoder.decode(value, { stream: true });
    const lines = buffer.split('\n');
    buffer = lines.pop(); // Giữ lại dòng chưa hoàn chỉnh cuối cùng
    
    for (const line of lines) {
      if (line.trim() === '') continue;
      const jsonObject = JSON.parse(line);
      processData(jsonObject); // Thực hiện một số hành động với dữ liệu
    }
  }
}

Các Trường Hợp Sử Dụng Thông Thường cho NDJSON Streaming

NDJSON streaming đặc biệt có giá trị trong các kịch bản như:

  • Phân tích thời gian thực: Streaming dữ liệu sự kiện để xử lý ngay lập tức
  • Tổng hợp nhật ký: Liên tục gửi nhật ký ứng dụng đến các hệ thống giám sát
  • Xuất dữ liệu: Chuyển giao các bộ dữ liệu lớn mà không bị giới hạn bộ nhớ
  • Các ứng dụng IoT: Xử lý dữ liệu cảm biến khi nó được tạo ra
  • Feeds hoạt động: Gửi các sự kiện mạng xã hội hoặc ứng dụng theo thời gian thực

Kiểm Tra Các Điểm Cuối NDJSON Với Apidog

Apidog, nền tảng phát triển API toàn diện, cung cấp hỗ trợ tích hợp để thử nghiệm và gỡ lỗi các điểm cuối streaming NDJSON. Dưới đây là cách Apidog đơn giản hóa việc làm việc với NDJSON:

1. Trực Quan Hóa Luồng Thời Gian Thực

Giao diện người dùng của Apidog hiển thị các phản hồi NDJSON theo thời gian thực, cho thấy từng đối tượng JSON khi nó đến từ máy chủ. Điều này giúp dễ dàng theo dõi dữ liệu streaming mà không cần viết mã tùy chỉnh.

2. Phân Tích và Định Dạng Tự Động

Apidog tự động phân tích từng dòng của NDJSON khi nó đến, định dạng cho dễ đọc trong khi vẫn giữ nguyên tính chất streaming của phản hồi.

3. Cấu Hình Yêu Cầu

Apidog giúp dễ dàng cấu hình các tiêu đề và tham số cần thiết cho các yêu cầu streaming NDJSON, đảm bảo giao tiếp đúng với các điểm cuối streaming của bạn.

Hướng Dẫn Từng Bước Để Streaming Các Điểm Cuối HTTP Trả Về NDJSON

Để thử nghiệm một điểm cuối streaming NDJSON trong Apidog:

Bước 1: Tạo một yêu cầu HTTP mới

tạo một yêu cầu API mới bằng Apidog

Bước 2: Đặt phương thức yêu cầu

xác định phương thức yêu cầu HTTP trong Apidog

Bước 3: Nhập URL điểm cuối streaming của bạn

Nhập URL yêu cầu điểm cuối trong Apidog

Bước 4: Gửi yêu cầu

gửi yêu cầu điểm cuối bằng Apidog

Bước 5: Xem kết quả thử nghiệm

Theo dõi khi Apidog hiển thị phản hồi NDJSON streaming theo thời gian thực

Ollama

Bạn có thể chọn hợp nhất các thông điệp NDJSON đã trả về thành một phản hồi hoàn chỉnh. Tìm hiểu thêm ở đây.

Kết Luận

NDJSON cung cấp một giải pháp thanh lịch cho việc streaming dữ liệu có cấu trúc qua HTTP, kết hợp tính linh hoạt của JSON với hiệu quả của việc xử lý từng dòng một. Dù bạn đang xây dựng phân tích thời gian thực, hệ thống xử lý nhật ký, hay chức năng xuất dữ liệu, NDJSON cung cấp một cách tiếp cận đơn giản nhưng mạnh mẽ để xử lý dữ liệu streaming.

Với sự hỗ trợ của Apidog cho NDJSON streaming, việc kiểm tra và gỡ lỗi các điểm cuối này trở nên dễ dàng hơn đáng kể. Bạn có thể trực quan hóa, kiểm tra và xác thực dữ liệu streaming của mình mà không cần phải viết mã tùy chỉnh, rút ngắn quy trình phát triển của bạn và đảm bảo các API streaming của bạn hoạt động như mong đợi.

Hãy bắt đầu khám phá NDJSON streaming với Apidog ngay hôm nay và trải nghiệm sức mạnh của việc xử lý dữ liệu thời gian thực trong các ứng dụng của bạn!

button