授權NDJSON匯出在一條路徑正常,讀取區塊大小改變後卻失敗。若用戶端把每次read當一筆JSON,紀錄跨兩次讀取、多筆一起抵達或UTF-8字元跨位元組緩衝時,就會暴露問題。

驗收一項不變條件:同一份有效位元組,不論如何分成讀取區塊,都應產生相同接納紀錄。本文提出受控解析器及代理路徑測試,不代表已執行結果或98IP串流行為保證。

不等長傳輸區塊經過解碼器與行緩衝,形成三張完整紀錄卡,未完成尾端片段保留於獨立琥珀色托盤

一、約定紀錄與完成條件

確認目的端確實回傳NDJSON,而非單一JSON陣列或SSE。NDJSON規格使用UTF-8,每個JSON文字後接換行,解析器接受LF與CRLF分隔。空行、格式錯誤JSON及大小限制的處理須明訂。

本測試使用嚴格換行結尾樣本。完整JSON值若缺約定末尾分隔符,依此契約是分框失敗,但不能單憑它證明網路截斷;不完整JSON片段是另一種失敗,兩者都須區別於成功結束。

語法與完整性分開。已知小型有限樣本應查核預期紀錄ID及值;真實API若提供文件化清單或完成紀錄,依其規則驗收,不杜撰標記,也不假設每條串流都有已知總數。

二、一份位元組樣本,多種分塊計畫

  1. 建立三筆無害合成紀錄,各有唯一已知ID,包含非ASCII值及跳脫換行字串,而非JSON文字內實際換行。
  2. 依約定UTF-8與分隔政策序列化一次,保存精確位元組及預期解析值作為本機參考。
  3. 將相同位元組以一次讀取、多個小塊及刻意不等長塊送入消費端。
  4. 邊界放在多位元組字元內、JSON符記內、CRLF變體的CR與LF之間,以及一次包含多筆完整紀錄之後。

這些是受控用戶端樣本,不承諾TCP封包或瀏覽器暴露區塊的邊界。不能加入延遲就假設強制特定分塊。先以確定分塊檢查消費端,再獨立觀察真實網路路徑。

三、保留解碼及行緩衝狀態

使用可跨讀取保留狀態的增量UTF-8解碼器,或執行環境支援的適當文字解碼串流。逐塊獨立解碼可能破壞跨塊字元。串流結束時完成解碼器刷新,解碼錯誤依明確嚴格度政策處理,不算成功內容。

將解碼文字附加到待處理行緩衝,只取出完整分隔行,逐筆依約定解析,未結束尾端留給下次讀取。一次read可產生零筆、一筆或多筆。不能遇到每個CR就盲目分割,須處理跨讀取的CRLF配對。

限制緩衝位元組、行長、總接納紀錄及測試總時間。永不送出分隔符的串流不能無限占記憶體。位元組與字元限制應清楚命名,非ASCII資料下兩者不等價。

四、路徑對照先分清表示層

由小型授權端點提供自有樣本,基準與代理路徑使用相同用戶端及契約。解析前檢查狀態與實際表示:HTTP 200背後的登入HTML不是NDJSON。

98IP動態住宅IP產品頁可確認授權資料路徑測試的產品,執行前查核目前帳號選項;已公布連線方式參考API設定頁。兩者不保證特定讀取區塊大小,也不定義目的端紀錄結構。

記錄雜湊或計數對應哪一層位元組。HTTP用戶端自動解壓縮時,應以交給消費端的解壓縮表示對照樣本,不與壓縮傳輸位元組混比。表示位元組相同而分塊不同,接納ID及值就不應改變。

五、分開部分產出與完整驗收

EOF時刷新解碼,依規則只處理有效完整行,再檢查剩餘緩衝。格式錯誤尾端、缺分隔符、讀取錯誤、超限停止或缺預期紀錄,都須明確標示,不因前段可解析就丟棄壞尾端。

證據分四欄:收到的表示、解碼與分框結果、紀錄驗證、最終樣本完整性。合成案例若兩筆有效而第三筆不完整,應報告兩筆暫存紀錄及不完整串流,不能計為完整匯出。

應用程式須定義完成後整批提交,或逐筆提交並標記部分狀態。有限匯出重試應遵循目的端核准恢復及去重規則,不把重播盲目附加到原部分結果,再以增加行數宣稱成功。

六、演練HTTP狀態看不出的失敗

建議本機案例:EOF切斷多位元組字元、刪除末尾分隔符、截斷最後JSON值、中間插入格式錯誤JSON,以及超過設定行長。各案例應出現約定錯誤或不完整判定,不默默接納全樣本。本文未實際執行這些演練。

有效樣本也應只改分塊並要求相同解析結果。本機即失敗,先修解碼或分框消費端再歸因代理;本機通過但網路表示位元組不同,再以遮蔽證據檢查回應生成、傳輸及用戶端轉換。

記錄案例ID、樣本版本、分隔政策、分塊計畫或觀察讀取大小、解碼政策、第一失敗邊界、接納ID與完成判定。真實資料保持私密,小型合成重現通常比整份客戶匯出更易審查。

常見問題與驗收清單

每次read能直接獨立JSON.parse嗎?不能,讀取邊界不是紀錄邊界,應先增量解碼並擷取完整行。

檢視器可正常開啟就代表完整嗎?不能,前段有效紀錄可顯示,有限匯出仍可能不完整。

  • 表示、分隔符及EOF政策明確。
  • 相同位元組經受控分塊仍產生相同紀錄。
  • UTF-8與CRLF狀態跨讀取保留。
  • 緩衝、時間與紀錄數有界。
  • 部分紀錄與完整匯出判定分開。
  • 重試及提交不掩蓋殘尾或製造未追蹤重複。

僅用自有或明確授權端點、合成資料及少量請求預算,遮蔽代理憑證、存取權杖與簽章網址,只留必要診斷產物。不從本方案宣稱實測吞吐、遺失率或商業成果。