<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Js on Tarragon</title><link>https://tarrragon.github.io/blog/tags/js/</link><description>Recent content in Js on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/js/index.xml" rel="self" type="application/rss+xml"/><item><title>模組三：SDK 設計模式</title><link>https://tarrragon.github.io/blog/monitoring/03-sdk-design/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/monitoring/03-sdk-design/</guid><description>&lt;p>回答「怎麼在各平台埋點」。三個 SDK（JS/Flutter/Python）共用同一套事件格式，公開 API 保持一致。&lt;/p>
&lt;h2 id="待寫章節">待寫章節&lt;/h2>
&lt;ul>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> SDK 公開 API 設計（init / event / error / metric / flush / close）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 自動攔截機制（JS window.onerror / Flutter FlutterError / Python sys.excepthook）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 攢批送出策略（flush interval / buffer size / flush on close）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> 離線 buffer 與重試（FIFO 丟棄 / 本地 persistence / 恢復後補發的取捨）&lt;/li>
&lt;li>&lt;input checked="" disabled="" type="checkbox"> SDK redaction helper（模組七的實作層）&lt;/li>
&lt;/ul>
&lt;h2 id="跨分類引用">跨分類引用&lt;/h2>
&lt;ul>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/testing/03-protocol-integration-test/" data-link-title="模組三：協議整合測試" data-link-desc="對真實服務驗證 WebSocket / gRPC / HTTP 協議契約 — unit test 和 E2E test 之間的一層">testing 模組三 協議整合測試&lt;/a>：SDK 的 HTTP POST 行為需要 protocol test&lt;/li>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/monitoring/07-security-privacy/" data-link-title="模組七：資安與隱私" data-link-desc="SDK redaction / transport 加密 / collector access control / 去識別化 — 蒐集的資料本身就是風險資產">monitoring 模組七 資安&lt;/a>：redaction 在 SDK 端做&lt;/li>
&lt;li>← &lt;a href="https://tarrragon.github.io/blog/testing/01-test-strategy-layers/" data-link-title="模組一：測試策略分層" data-link-desc="Unit / Protocol Integration / Screen State 三層測試各自的職責、盲區和判斷原則">testing 模組一 測試策略&lt;/a>：mock 遮蔽機制影響 SDK 的 auto-intercept 行為驗證&lt;/li>
&lt;li>實作 repo：tarrragon/monitor 的 sdk-js / sdk-flutter / sdk-python&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>回答「怎麼在各平台埋點」。三個 SDK（JS/Flutter/Python）共用同一套事件格式，公開 API 保持一致。</p>
<h2 id="待寫章節">待寫章節</h2>
<ul>
<li><input checked="" disabled="" type="checkbox"> SDK 公開 API 設計（init / event / error / metric / flush / close）</li>
<li><input checked="" disabled="" type="checkbox"> 自動攔截機制（JS window.onerror / Flutter FlutterError / Python sys.excepthook）</li>
<li><input checked="" disabled="" type="checkbox"> 攢批送出策略（flush interval / buffer size / flush on close）</li>
<li><input checked="" disabled="" type="checkbox"> 離線 buffer 與重試（FIFO 丟棄 / 本地 persistence / 恢復後補發的取捨）</li>
<li><input checked="" disabled="" type="checkbox"> SDK redaction helper（模組七的實作層）</li>
</ul>
<h2 id="跨分類引用">跨分類引用</h2>
<ul>
<li>→ <a href="/blog/testing/03-protocol-integration-test/" data-link-title="模組三：協議整合測試" data-link-desc="對真實服務驗證 WebSocket / gRPC / HTTP 協議契約 — unit test 和 E2E test 之間的一層">testing 模組三 協議整合測試</a>：SDK 的 HTTP POST 行為需要 protocol test</li>
<li>→ <a href="/blog/monitoring/07-security-privacy/" data-link-title="模組七：資安與隱私" data-link-desc="SDK redaction / transport 加密 / collector access control / 去識別化 — 蒐集的資料本身就是風險資產">monitoring 模組七 資安</a>：redaction 在 SDK 端做</li>
<li>← <a href="/blog/testing/01-test-strategy-layers/" data-link-title="模組一：測試策略分層" data-link-desc="Unit / Protocol Integration / Screen State 三層測試各自的職責、盲區和判斷原則">testing 模組一 測試策略</a>：mock 遮蔽機制影響 SDK 的 auto-intercept 行為驗證</li>
<li>實作 repo：tarrragon/monitor 的 sdk-js / sdk-flutter / sdk-python</li>
</ul>
]]></content:encoded></item></channel></rss>