使用GraphQL對資料模型和訊息格式實現類似XML的DTD驗證

banq發表於2021-12-14

自從可擴充套件資料結構(XML、JSON、YAML...)開始大規模使用以來,訊息和事件負載驗證一直是一個相當棘手的問題。事實上,自DTD的美好時光以來,幾乎沒有取得任何進展。

Schema 語言並不新鮮,有幾十種:SQL、XML Schema、json-schema、Protobuf、GraphQL……

Schema 語言關鍵是:完全能夠表達資料模型或訊息格式,但大多數不能同時表達兩者,這就是問題所在:

例如,給定的資料實體可能有 5 個必填欄位被認為是有效的。但是,當訊息攜帶該實體時,它可以傳達任意數量的屬性。相反,屬性在資料模式中可能是可選的,但在特定上下文中,訊息模式可能需要該屬性。您需要兩組不同的語義來表達資料模型Schema攜帶該資料模型實體的訊息格式

GraphQL 提供了一組獨特的語義和工具,可以輕鬆建立Schema架構:

  • Schema語言
  • 一種具有“投影語義”的查詢語言
  • 用於註釋架構或查詢語言的自定義指令
  • 兩種語法的解析器
  • 具有語法著色、驗證功能的現代編輯器...
  • 文件生成器

本質上,剩下要做的就是實現模式生成器,這些生成器將採用訊息格式定義(如 GraphQL 查詢)並生成其他模式語言,例如 Protobuf、json-schema、XML Schema 和特定語言的客戶端庫。

在 Nav,我們想到了使用該基礎來開發我們的 Schema Architecture(它現在是一個 FOSS 專案)。它今天正在生產中使用,並且沒有回頭路。我們在微服務架構的所有節點上都得到了一致的驗證,這是我們以前從未實現過的。當您將訊息或事件定義與生成的模式和程式碼庫進行比較時,開發收益是顯著的。

 

相關文章