ในโลกที่ขับเคลื่อนด้วยข้อมูลในปัจจุบัน การถ่ายโอนชุดข้อมูลขนาดใหญ่ระหว่างระบบอย่างมีประสิทธิภาพเป็นสิ่งสำคัญ แม้ว่า JSON จะกลายเป็นรูปแบบมาตรฐานสำหรับการแลกเปลี่ยนข้อมูล แต่ก็ต้องเผชิญกับข้อจำกัดเมื่อจัดการข้อมูลจำนวนมากหรือสถานการณ์การสตรีม นี่คือที่มาของ NDJSON (Newline Delimited JSON) – รูปแบบที่เรียบง่ายแต่ทรงพลังซึ่งปฏิวัติวิธีการสตรีมข้อมูลผ่านการเชื่อมต่อ HTTP ในบทความนี้ เราจะสำรวจว่า NDJSON คืออะไร แตกต่างจาก JSON มาตรฐานอย่างไร และ Apidog สามารถช่วยคุณทำงานกับปลายทางสตรีมมิง NDJSON ได้อย่างไร
NDJSON คืออะไร
NDJSON (Newline Delimited JSON) เป็นรูปแบบที่เก็บข้อมูลที่มีโครงสร้างเป็นลำดับของอ็อบเจกต์ JSON โดยแต่ละอ็อบเจกต์อยู่ในบรรทัดของตัวเอง คั่นด้วยอักขระขึ้นบรรทัดใหม่ (\n
) นอกจากนี้ยังเป็นที่รู้จักกันในชื่อ JSON Lines (JSONL) ในบางบริบท
ตัวอย่างง่ายๆ ของ NDJSON:
{"id": 1, "name": "Alice", "score": 95}
{"id": 2, "name": "Bob", "score": 87}
{"id": 3, "name": "Charlie", "score": 92}
แต่ละบรรทัดเป็นอ็อบเจกต์ JSON ที่ถูกต้องและสมบูรณ์ ทำให้ง่ายต่อการประมวลผลหนึ่งระเบียนต่อครั้งโดยไม่ต้องโหลดชุดข้อมูลทั้งหมดลงในหน่วยความจำ
NDJSON เทียบกับ JSON แบบดั้งเดิม: ความแตกต่างที่สำคัญ
JSON แบบดั้งเดิมและ NDJSON ทำหน้าที่ต่างกันและมีลักษณะเฉพาะที่แตกต่างกัน:
คุณสมบัติ | JSON แบบดั้งเดิม | NDJSON |
---|---|---|
โครงสร้าง | เอกสารเดียวที่สมบูรณ์ | อ็อบเจกต์ JSON อิสระหลายรายการ |
การแยกวิเคราะห์ | ต้องโหลดเอกสารทั้งหมด | สามารถประมวลผลทีละบรรทัด |
การสตรีม | ไม่ได้ออกแบบมาสำหรับการสตรีม | เหมาะสำหรับการสตรีม |
การใช้หน่วยความจำ | ต้องใช้เอกสารทั้งหมดในหน่วยความจำ | ประมวลผลทีละบรรทัด |
ขนาดไฟล์ | จำกัดด้วยหน่วยความจำที่มี | เกือบไม่จำกัด |
ข้อได้เปรียบหลักของ NDJSON คือความสามารถในการประมวลผลแบบเพิ่มหน่วย ด้วย JSON แบบดั้งเดิม คุณต้องแยกวิเคราะห์ไฟล์ทั้งหมดก่อนเข้าถึงข้อมูลใดๆ ด้วย NDJSON คุณสามารถอ่านและประมวลผลทีละบรรทัด ทำให้เหมาะสำหรับ:
- ไฟล์บันทึก
- การสตรีมข้อมูล
- ชุดข้อมูลขนาดใหญ่
- การประมวลผลข้อมูลแบบเรียลไทม์
เหตุใดจึงใช้ NDJSON สำหรับการสตรีม HTTP
การสตรีม HTTP ช่วยให้เซิร์ฟเวอร์ส่งข้อมูลไปยังไคลเอนต์แบบเพิ่มหน่วย แทนที่จะรอให้การตอบสนองทั้งหมดพร้อม NDJSON เหมาะอย่างยิ่งสำหรับการสตรีม HTTP เนื่องจาก:
- ความเรียบง่าย: แต่ละบรรทัดเป็นอ็อบเจกต์ JSON ที่ถูกต้องและสมบูรณ์
- ความเข้ากันได้: ทำงานร่วมกับตัวแยกวิเคราะห์ JSON ที่มีอยู่
- การประมวลผลแบบเพิ่มหน่วย: ไคลเอนต์สามารถประมวลผลข้อมูลเมื่อมาถึง
- ประสิทธิภาพของหน่วยความจำ: ไม่จำเป็นต้องบัฟเฟอร์การตอบสนองทั้งหมด
- การอ่านได้ของมนุษย์: ง่ายต่อการตรวจสอบและแก้ไขข้อบกพร่อง
วิธีการสตรีม NDJSON ผ่านปลายทาง HTTP
การใช้งานการสตรีม NDJSON ผ่าน HTTP นั้นตรงไปตรงมา นี่คือวิธีการทำงานทั้งในฝั่งเซิร์ฟเวอร์และไคลเอนต์:
การใช้งานฝั่งเซิร์ฟเวอร์
ในการสร้างปลายทาง HTTP ที่สตรีม NDJSON:
ตั้งค่าส่วนหัวที่เหมาะสม:
Content-Type: application/x-ndjson
Transfer-Encoding: chunked
เขียนอ็อบเจกต์ JSON แต่ละรายการไปยังสตรีมการตอบสนอง ตามด้วยอักขระขึ้นบรรทัดใหม่:
// ตัวอย่าง Node.js
app.get('/api/data/stream', (req, res) => {
res.setHeader('Content-Type', 'application/x-ndjson');
res.setHeader('Transfer-Encoding', 'chunked');
// สตรีมข้อมูลเมื่อพร้อมใช้งาน
dataSource.on('data', (item) => {
res.write(JSON.stringify(item) + '\n');
});
dataSource.on('end', () => {
res.end();
});
});
การประมวลผลฝั่งไคลเอนต์
ในฝั่งไคลเอนต์ คุณต้อง:
- ทำการร้องขอ HTTP ไปยังปลายทางการสตรีม
- ประมวลผลการตอบสนองแบบเพิ่มหน่วย ทีละบรรทัด
- แยกวิเคราะห์แต่ละบรรทัดเป็นอ็อบเจกต์ JSON
นี่คือตัวอย่าง JavaScript อย่างง่าย:
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(); // เก็บเส้นที่ไม่สมบูรณ์เส้นสุดท้าย
for (const line of lines) {
if (line.trim() === '') continue;
const jsonObject = JSON.parse(line);
processData(jsonObject); // ทำบางอย่างกับข้อมูล
}
}
}
กรณีการใช้งานทั่วไปสำหรับการสตรีม NDJSON
การสตรีม NDJSON มีประโยชน์อย่างยิ่งในสถานการณ์ต่างๆ เช่น:
- การวิเคราะห์แบบเรียลไทม์: สตรีมข้อมูลเหตุการณ์สำหรับการประมวลผลทันที
- การรวมบันทึก: ส่งบันทึกแอปพลิเคชันไปยังระบบตรวจสอบอย่างต่อเนื่อง
- การส่งออกข้อมูล: ถ่ายโอนชุดข้อมูลขนาดใหญ่โดยไม่มีข้อจำกัดด้านหน่วยความจำ
- แอปพลิเคชัน IoT: ประมวลผลข้อมูลเซ็นเซอร์เมื่อมีการสร้าง
- ฟีดกิจกรรม: ส่งมอบกิจกรรมโซเชียลมีเดียหรือแอปพลิเคชันแบบเรียลไทม์
การทดสอบปลายทาง NDJSON ด้วย Apidog
Apidog แพลตฟอร์มการพัฒนา API ที่ครอบคลุม มีการสนับสนุนในตัวสำหรับการทดสอบและแก้ไขข้อบกพร่องของปลายทางสตรีมมิง NDJSON นี่คือวิธีที่ Apidog ทำให้การทำงานกับ NDJSON ง่ายขึ้น:
1. การแสดงภาพสตรีมแบบเรียลไทม์
ส่วนต่อประสานผู้ใช้ของ Apidog จะแสดงการตอบสนอง NDJSON แบบเรียลไทม์ โดยแสดงอ็อบเจกต์ JSON แต่ละรายการเมื่อมาถึงจากเซิร์ฟเวอร์ ทำให้ง่ายต่อการตรวจสอบข้อมูลการสตรีมโดยไม่ต้องเขียนโค้ดแบบกำหนดเอง
2. การแยกวิเคราะห์และการจัดรูปแบบอัตโนมัติ
Apidog จะแยกวิเคราะห์แต่ละบรรทัดของ NDJSON โดยอัตโนมัติเมื่อมาถึง จัดรูปแบบให้อ่านง่ายในขณะที่ยังคงรักษาลักษณะการสตรีมของการตอบสนอง
3. การกำหนดค่าคำขอ
Apidog ทำให้ง่ายต่อการกำหนดค่าส่วนหัวและพารามิเตอร์ที่จำเป็นสำหรับการร้องขอการสตรีม NDJSON ทำให้มั่นใจได้ถึงการสื่อสารที่เหมาะสมกับปลายทางการสตรีมของคุณ
คู่มือทีละขั้นตอนในการสตรีมปลายทาง HTTP ที่ส่งคืน NDJSON
ในการทดสอบปลายทางสตรีมมิง NDJSON ใน Apidog:
ขั้นตอนที่ 1: สร้างคำขอ HTTP ใหม่

ขั้นตอนที่ 2: ตั้งค่าวิธีการร้องขอ

ขั้นตอนที่ 3: ป้อน URL ปลายทางการสตรีมของคุณ

ขั้นตอนที่ 4: ส่งคำขอ

ขั้นตอนที่ 5: ดูผลการทดสอบ
ดู Apidog แสดงการตอบสนอง NDJSON แบบสตรีมมิงแบบเรียลไทม์

คุณสามารถเลือกที่จะรวมข้อความ NDJSON ที่ส่งคืนเป็นคำตอบที่สมบูรณ์ได้ เรียนรู้เพิ่มเติมได้ที่นี่
บทสรุป
NDJSON มอบโซลูชันที่สง่างามสำหรับการสตรีมข้อมูลที่มีโครงสร้างผ่าน HTTP โดยผสมผสานความยืดหยุ่นของ JSON เข้ากับประสิทธิภาพของการประมวลผลแบบบรรทัดต่อบรรทัด ไม่ว่าคุณจะสร้างการวิเคราะห์แบบเรียลไทม์ ระบบประมวลผลบันทึก หรือฟังก์ชันการส่งออกข้อมูล NDJSON มอบแนวทางที่เรียบง่ายแต่ทรงพลังในการจัดการข้อมูลการสตรีม
ด้วยการสนับสนุนของ Apidog สำหรับการสตรีม NDJSON การทดสอบและแก้ไขข้อบกพร่องของปลายทางเหล่านี้จะง่ายขึ้นอย่างมาก คุณสามารถแสดงภาพ ตรวจสอบ และตรวจสอบความถูกต้องของข้อมูลการสตรีมของคุณได้โดยไม่ต้องเขียนโค้ดแบบกำหนดเอง เร่งกระบวนการพัฒนาของคุณ และทำให้มั่นใจได้ว่า API การสตรีมของคุณทำงานตามที่คาดไว้
เริ่มสำรวจการสตรีม NDJSON ด้วย Apidog วันนี้ และสัมผัสพลังของการประมวลผลข้อมูลแบบเรียลไทม์ในแอปพลิเคชันของคุณ!