使用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 專案)。它今天正在生產中使用,並且沒有回頭路。我們在微服務架構的所有節點上都得到了一致的驗證,這是我們以前從未實現過的。當您將訊息或事件定義與生成的模式和程式碼庫進行比較時,開發收益是顯著的。
相關文章
- XML Schema和XML DTD的資料型別比較XML資料型別
- Laravel Graphql Mutation 時資料驗證及複雜格式資料輸入 (InputObjectType)LaravelObject
- 在java程式中用DTD來驗證xml格式不起作用是為什麼?請教高手JavaXML
- java 實現的XML schema 驗證(轉)JavaXML
- Redis 使用 List 實現訊息佇列能保證訊息可靠麼?Redis佇列
- C#實現類似QQ的隱藏浮動窗體、訊息閃動C#
- Ext實現的身份證格式驗證程式碼
- android 實現類似qq未讀訊息點選迴圈顯示Android
- ThinkPHP 類似 AOP 思想的引數驗證PHP
- spring mvc實現Restful返回xml格式資料SpringMVCRESTXML
- 微信開發中的訊息驗證與訊息回覆
- 實現類似QQ的即時通訊程式(十一)
- Laravel 驗證類 實現 路由場景驗證 和 控制器場景驗證Laravel路由
- C# SQLiteHelper類似SqlHelper類實現存取Sqlite資料庫C#SQLite資料庫
- 如何用 Visual C#.net 中的 DTD、 XDR,或 XSD 驗證 XML 文件C#XML
- 自定義訊息和對訊息的理解
- 簡訊驗證實現方式
- 使用正規表示式進行xml資料驗證(轉)XML
- 解析微信xml訊息使用的jar包XMLJAR
- js實現的郵箱格式驗證程式碼JS
- iOS 環信 EaseUI 的使用一:可傳送類似名片自定義的訊息iOSUI
- Android中XML格式資料的簡單使用AndroidXML
- lumen驗證類 實現控制器場景驗證
- Kafka的訊息格式Kafka
- 自定義一個簡單的資料模型驗證器類,可用於各類驗證場景,待後續完善模型
- js實現的email郵箱格式驗證程式碼JSAI
- JAXB(一)——初體驗之實現XML和物件之間的對映XML物件
- PHP 對資料進行驗證和過濾PHP
- ADO資料與XML資料間的轉換的類(ASP實現) (轉)XML
- 使用 NSProxy 實現訊息轉發
- 使用SignalR實現訊息提醒SignalR
- 實現Oracle對ldap資料的各類操作OracleLDA
- 【mybatis xml】資料層框架應用--Mybatis 基於XML對映檔案實現資料的CRUDMyBatisXML框架
- PostgreSQL類似OracleMERGE功能的實現SQLOracle
- 使用Django-Channels實現websocket通訊+大模型對話DjangoWeb大模型
- RabbitMQ,RocketMQ,Kafka 訊息模型對比分析MQKafka模型
- 用跨程式子類化技術實現對其它程式訊息的攔載 (轉)
- QStyledItemDelegate 和QTreeView實現滑鼠hover訊息QTView