RFC-0104:相對元件網址

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

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

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

摘要

這是在元件架構中新增相對元件網址的建議。相對網址必須符合網址 RFC 3986 規範。初始相對網址實作僅支援含有片段,但不支援含有主機或套件的相對網址。相對網址是與元件最接近的祖系 (具有絕對網址) 相對的網址。相對網址解析器會在執行階段解析相對網址,透過使用絕對網址尋找元件最接近的祖系,以判斷正確的主機和套件。

提振精神

缺少相對網址會導致元件無法重複使用。且應可在未經修改的情況下納入及用於新的套件。但是,當元件使用絕對網址宣告其子項時,這些子項一律必須透過絕對套件解析。如果父項網址在不同的套件中重複使用,因為父項網址和子項都位於不同的套件中,這樣可能就會發生問題。相對網址表示「我總是希望從相同套件中解析這個元件,藉此達到保留不變的效果並重複使用。

使用相對網址進行測試時,特別適合用於測試密封重要性,且經常會在新的測試套件中重複使用元件的情形。

另一個好處是相對網址方便性。元件作者不需要多次重複套件名稱,也較不會因錯字而造成錯誤。

範例:Isolated-Driver-Manager

一起來看看具體用途。驅動程式架構團隊希望使用相對網址,以便撰寫獨立的驅動程式庫整合測試。

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

相對網址示例

驅動程式架構需要多個測試元件共同合作,才能進行整合測試。所有這些元件都必須從測試套件中載入,才能一起更新,並存取位於測試套件中的測試驅動程式。

如果沒有相對網址,您必須為每個新測試編輯 isolated-driver-manager.cm,才能指向該測試套件的本機 driver-manager.cmdriver-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 在建構時產生頂層領域,以便插入正確的套件名稱。

設計

相對網址的格式

相對網址遵循網址 RFC 3986 中所述的格式。相對網址將重新根據具有絕對網址的最近祖系。

在初始實作中,相對網址僅支援片段。宣告查詢參數、路徑或主機名稱的相對網址一開始不會受支援。系統最終可能支援上述函式。

範例如下:

相對網址:

#meta/child.cm

最接近絕對網址的祖系:

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 會在 component_manager 中實作 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。

效能

這樣一來,系統應該不會對效能造成影響。RelativeResolver 是在元件架構內部實作,因此可執行祖系步行及完整網址解析,不必發出任何處理序間通訊 (IPC) 呼叫。

安全性考量

這對安全性應該幾乎不會造成任何影響。因此,請格外小心,讓系統正確剖析相對網址並重新建構。

隱私權注意事項

這項異動不會對隱私權造成任何影響。

測試

相對解析器將會有單元測試,並會新增使用相對網址的整合測試。

說明文件

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

缺點、替代方案和未知

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

另一個完成相對網址的方式是使用範本 CML 檔案,在建構期間解析相對網址,並將絕對網址放置於已編譯的 CM 檔案。

這有幾項優點:

  • 不需要變更架構執行階段。執行階段只會處理絕對網址。
  • 相對網址會在建構期間解析,因此,建構後分析會比較容易,因為在執行階段未解決任何內容。

這也有幾個缺點:

  • 一般而言,CML 不想建立範本
  • 在建構系統與 cmc 之間新增更多整合。
  • 因為可以使用不同的建構系統建構樹狀結構外元件,建構系統整合作業會更加複雜。
  • 如果套件包含預先建構的元件,這會如何運作。

替代版本:從 /pkg 讀取的相對解析器元件

另一個完成相對網址的方法是使用相對解析元件,也就是從 /pkg 讀取來解析網址。

優點:

  • 解析器功能不會在元件架構中實作,因此更加模組化

缺點:

  • 想使用相對解析器的每個元件都需要在套件中加入 Relative Resolver 元件,並在 CML 檔案中正確連接該元件
  • 這在日後的元件架構安全性工作上,元件不會有元件檔案的完整存取權,但只能存取元件檔案。

替代網址:相對網址採用「relative://」配置

我們可以針對相對網址採用特定的配置。由於所有支援的網址都是「有效」的完整網址,因此剖析網址會較容易。

優點:

  • 輕鬆剖析網址

缺點:

  • 與網址規格不一致

先前的圖片和參考資料

網址規格定義了網址 RFC 3986 中的相對網址。請將這個確切規格視為替代章節。