RFC-0104:相對元件網址

RFC-0104:相對元件網址
狀態已接受
領域
  • 元件架構
說明

解析為父項元件套件的相對元件網址。

問題
毛皮變化
作者
審查人員
提交日期 (年-月-日)2021-05-20
審查日期 (年-月-日)2021-06-14

摘要

本次提案旨在將相對元件網址加入「元件架構」。A 罩杯 相對網址 網址 RFC 3986 規格。初始相對網址導入方式僅支援 片段的話,則不支援含有主機或套件的相對網址。親戚 網址與元件最接近且具有絕對網址的祖係有關。 相對網址解析器會在執行階段解析相對網址來判斷 找出元件最接近且含有 絕對網址

提振精神

缺少相對網址會導致元件可重複使用。元件 ,且無須修改即可納入新套件。 不過,當元件使用絕對網址宣告其子項時, 子項一律會從絕對套件中解析這可以 如果在其他套件中重複使用上層網址 (和現在的 父項和子項位於不同套件中。假設某個相對網址顯示「我 這個元件總是能透過相同套件完成解析」 提倡隱密與再利用

如果想測試連貫性,使用相對網址特別有用 以及元件在新的測試套件中最常重複使用的元件。

另一個好處是相對網址方便易用。元件作者確實 您不必重複執行相同的套件名稱, 以及錯字所造成的錯誤

範例:隔離駕駛管理員

我們來看看特定用途。駕駛架構團隊希望 相對網址,方便用來編寫獨立的驅動程式庫整合測試。

以下是這類測試的拓撲範例:

相對網址示例

驅動程式架構需要多個測試元件搭配運作 整合測試。這些元件都應從測試中載入 以便同時更新,以及存取測試驅動程式 定期更新

如未使用相對網址,就必須編輯 isolated-driver-manager.cm 且其可指向本機 driver-manager.cm, 該測試套件的 driver-index.cm。例如指向:

  • fuchsia-pkg://fuchsia.com/my-test-package#meta/driver-manager.cm
  • fuchsia-pkg://fuchsia.com/my-test-package#meta/driver-index.cm

使用相對網址,就不必修改 isolated-driver-manager.cm 的相對網址 而且每個新的測試都會使用相對網址的語法,如下所示:

  • #meta/driver-manager.cm
  • #meta/driver-index.cm

值得注意的是,目前 CFv2 IsolatedDevmgr 會產生 頂層運作領域,讓系統能夠插入正確的套件名稱。

設計

相對網址的格式

相對網址會採用 URL RFC 3986。 相對網址將會重新以最近的祖系 (含有 絕對網址

初次實作時,相對網址僅支援 片段。宣告查詢參數、路徑或主機的相對網址 一開始會不受支援。系統最終可能會支援這些格式。

例如:

相對網址:

#meta/child.cm

含有絕對網址的 Closest Ancestor:

fuchsia-pkg://fuchsia.com/my-package/0/?hash=1234#meta/parent.cm

已解析的網址:

fuchsia-pkg://fuchsia.com/my-package/0/?hash=1234#meta/child.cm

相對解析器

RelativeResolver 將是相對網址的解析器。解析器為 已宣告的特定網址配置;RelativeResolver 將會是 空白配置「"」的解析器。RelativeResolver 將會於 元件中的一個元件。RelativeResolver 解析元件時,會 向上走該元件的祖系來找出第一個祖系 元件網址並非相對網址。解析器會接著重新按 指向絕對網址方法是複製絕對網址 以相對網址的片段取代區段區段。 RelativeResolver 隨即會對重新導向的網址發出解析要求, 會照常處理

以下範例說明如何透過多個相對元件求出絕對值 網址。

解析相對網址

請按照下列步驟讓 RelativeResolver 解決 #meta/child.cm

  1. 步行祖系,直到找到第一個絕對網址
  • 第一個絕對網址是 fuchsia-pkg://fuchsia.com/my-package#meta/realm.cm
  1. 將相對網址重回絕對網址,藉此建立絕對網址。
  • 我們的絕對網址為 fuchsia-pkg://fuchsia.com/my-package#meta/child.cm
  1. 傳送絕對網址的解析要求
  • 在此情況下,我們的要求會由 fuchsia-pkg 解析器正常處理
  1. 傳回解決要求的結果

實作

我們打算將 RelativeResolver 實作為內建解析器, 提供的元件RelativeResolver 將會新增至 根元件環境,因此 但任何擴充自該環境的元件都能使用

成效

這對效能的影響微乎其微。RelativeResolver 為 元件架構內部實作,現在可以進行祖系瀏覽 和完整的網址解析,不必發出任何處理序間通訊 (IPC) 呼叫。

安全性考量

這對安全性的影響微乎其微。需要額外謹慎 相對網址,系統需要剖析並正確重新剖析相關網址。

隱私權注意事項

這不會對隱私權產生任何影響。

測試

相對解析器會提供單元測試,而整合測試將是 添加了使用相對網址的網址

說明文件

我們會在元件架構網址中加入其他說明文件 說明文件。

缺點、替代方案和未知

替代做法:在建構期間解析相對網址的 CML 範本

另一個達成相對網址的方法是使用範本 CML 檔案。 相對網址會在建構期間解析,且絕對網址位於 。

這種做法有以下優點:

  • 無需變更架構執行階段。執行階段專屬交易 使用絕對網址
  • 相對網址會在建構期間解析,進行建構後分析 執行起來就比較輕鬆

這也有幾個缺點:

  • CML 通常不需要 範本
  • 增加建構系統與 cmc 之間的更多整合。
  • 如同樹狀結構外元件,建構系統整合會變得更加複雜 也可使用不同的建構系統來建構應用程式
  • 不清楚如果套件含有預先建構的元件,這麼做會如何運作。

替代選項:讀取 /pkg 的相對解析器元件

您也可以使用相對解析器來完成相對網址 元件,該元件會從 /pkg 讀取來解析網址。

優點:

  • 元件架構中並未實作解析器功能,導致 更加模組

缺點:

  • 需要相對解析器的每個元件都需要包含 將 Relative Resolver 元件加入其套件中,並正確連接在其套件中 CML 檔案
  • 這不符合日後的元件架構安全性作業 無法存取 /pkg,但只能存取其元件 檔案。

替代版本:相對網址包含「relative://」配置

我們可針對相對網址採用特定的配置。這會導致 剖析網址會稍微簡單許多,因為所有支援的網址都會是「有效」 完整網址

優點:

  • 網址剖析更輕鬆

缺點:

  • 與網址規格不一致

既有藝術品和參考資料

網址規格定義了 URL RFC 3986。 確切的規格會參考「替代做法」一節。