使用GraphQL對資料模型和訊息格式實現類似XML的DTD驗證
自從可擴充套件資料結構(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 專案)。它今天正在生產中使用,並且沒有回頭路。我們在微服務架構的所有節點上都得到了一致的驗證,這是我們以前從未實現過的。當您將訊息或事件定義與生成的模式和程式碼庫進行比較時,開發收益是顯著的。
相關文章
- Laravel Graphql Mutation 時資料驗證及複雜格式資料輸入 (InputObjectType)LaravelObject
- ThinkPHP 類似 AOP 思想的引數驗證PHP
- Redis 使用 List 實現訊息佇列能保證訊息可靠麼?Redis佇列
- Laravel 驗證類 實現 路由場景驗證 和 控制器場景驗證Laravel路由
- 使用 Message Manager 實現開箱即用的驗證(Validation)資訊丟擲
- iOS 環信 EaseUI 的使用一:可傳送類似名片自定義的訊息iOSUI
- PostgreSQL類似OracleMERGE功能的實現SQLOracle
- 【mybatis xml】資料層框架應用--Mybatis 基於XML對映檔案實現資料的CRUDMyBatisXML框架
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- lumen驗證類 實現控制器場景驗證
- 簡訊驗證實現方式
- 自定義一個簡單的資料模型驗證器類,可用於各類驗證場景,待後續完善模型
- PHP 對資料進行驗證和過濾PHP
- 給XML檔案定義DTDXML
- 使用KubernetesIngress來實現類似Istio條件路由路由
- ABAP和XML資料格式互相轉換的兩種方式XML
- XML 驗證概述XML
- 基於數值資料理解和重要資訊驗證的資料到文字生成模型模型
- 使用Spring Boot實現的GraphQL示例Spring Boot
- WinForm使用DataGridView實現類似Excel表格的查詢替換ORMViewExcel
- 使用 NSProxy 實現訊息轉發
- mongoose使用validate驗證, 獲取自定義驗證資訊Go
- 使用Django-Channels實現websocket通訊+大模型對話DjangoWeb大模型
- 使用Visual Studio將JSON格式資料自動轉化為對應的類JSON
- 使用.net standard實現不同內網埠的互通(類似花生殼)內網
- [Python]實現簡訊驗證碼的傳送Python
- 使用 Spring Validator 介面實現驗證Spring
- Laravel 的 Validation 檢索驗證錯誤訊息Laravel
- C# 使用SignalR實現訊息通知C#SignalR
- 使用Spring Boot實現訊息佇列Spring Boot佇列
- QStyledItemDelegate 和QTreeView實現滑鼠hover訊息QTView
- RabbitMQ,RocketMQ,Kafka 訊息模型對比分析MQKafka模型
- MySQL 06 mysql 如何實現類似 oracle 的 merge intoMySqlOracle
- NPM酷庫051:xml2js,解析XML格式資料NPMXMLJS
- 如何對Kafka 中的訊息實現優先分級?Kafka
- JWT驗證使用者資訊功能JWT
- LiveKit:使用Go與WebRTC實現類似Zoom高影片質量GoWebOOM
- URL格式驗證