WADL中的JSON模式

在其他工作之間,我最近一直在審查WADL規范,以解決一些文檔問題,以生成更新版本。 因為顯而易見的一件事是缺少對XML以外的語言的語法支持-是的,您可以使用JSON <-> XML Schema的映射,但這對于JSON純粹主義者而言并不令人滿意。

因此,我開始研究如何在服務的WADL描述中附加JSON文檔的JSON-Schema語法。 這還不是一個規范。 但是有關它可能如何始終如一地工作的建議。

現在,我主要使用Jersey,因此,請考慮Jersey當前將為返回XML和JSON的服務生成什么。 因此,此處的服務是使用JAX-B綁定實現的,因此它們都使用與include的XML-Schema參考定義的結構類似的結構。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02"><doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 1.16-SNAPSHOT 10/26/2012 09:28 AM"/><grammars><include href="xsd0.xsd"><doc title="Generated" xml:lang="en"/></include></grammars><resources base="http://localhost/"><resource path="/root"><method id="hello" name="PUT"><request><representation xmlns:m="urn:message" element="m:requestMessage"  mediaType="application/json" /><representation xmlns:m="urn:message" element="m:requestMessage" mediaType="application/xml" /></request><response><representation xmlns:m="urn:message" element="m:responseMessage" mediaType="application/json"/><representation xmlns:m="urn:message" element="m:responseMessage" mediaType="application/xml" /></response></method></resource></resources>
</application>

因此,我們考慮的第一件事是在表示形式元素上重用現有的元素屬性(定義為QName),以引用導入的JSON-Schema。 除了沒有元素的XML元素外,這里還顯示了一個和另一個任意的名字空間。

<grammars><include href="xsd0.xsd" /><include href="application.wadl/responseMessage" /></grammars><representation element="responseMessage" mediaType="application/json"/>Orxmlns:json="http://wadl.dev.java.net/2009/02/json" <representation element="json:responseMessage" mediaType="application/json" />

問題在于,目前的JSON-Schema規范沒有“ name”屬性的概念,因此每個JSON-Schema都由其URI唯一標識。 同樣,從我閱讀的規范中,每個JSON-Schema最多包含一個文檔的定義-而不是XML-Schema中可以包含的多個類型/文檔。

因此,下一個最佳建議是僅使用URI的“文件名”部分作為URI的代理。 但是當然這不一定是唯一的。 例如,我可以看到美國政府和雅虎都在這里發布了自己的“地址”微格式。

解決此問題的更好方法是引入一個新屬性,幸運的是,WADL規范是在考慮到這一點而設計的,它是URI類型,可用于直接引用JSON-Schema定義。 因此,與上一個示例中的直接導入不同,我們在元素本身上具有URI屬性。 “ describeby”屬性名稱來自JSON-Schema建議,并且與規范中原子鏈接上使用的rel一致。

xmlns:json="http://wadl.dev.java.net/2009/02/json-schema" xmlns:m="urn:message" <grammars><include href="xsd0.xsd" /></grammars><representation mediaType="application/json"element="m:responseMessage" json:describedby="application.wadl/responseMessage" />

的第二個優點是,該格式與依賴XML-Schema語法的工具向后兼容。 盡管對于像我這樣從事工具/測試工具的人們來說,這可能只是有趣的事情。

一旦有了JSON-Schema定義,那么一些用戶將想一起廢除XML,因此,最后這里是WADL到僅包含JSON-Schema信息的JSON文檔的簡單映射。 Sergey Breyozkin已建議JSON映射僅顯示json語法,而我正在考慮這種思維方式。 我很想聽到一個想要訪問XML Schema的JSON映射用例。

{"doc":{"@generatedBy":"Jersey: 1.16-SNAPSHOT 10/26/2012 09:28 AM"},"resources":{"@base":"http://localhost/","resource":{"@path":"/root","method":{"@id":"hello","@name":"PUT","request":{"representation":[{"@mediaType":"application/json","@describedby":"application.wadl/requestMessage"}]},"response":{"representation":[{"@mediaType":"application/json","@describedby":"application.wadl/responseMessage"}]}}}}
}

我目前正在使用“ application / vnd.sun.wadl + json”的MIME類型來使此映射與默認的WADL MIME類型一致。 我懷疑我們將來會希望改變這種情況; 但這對初學者來說確實有用。

因此,這都是非常有趣的,但是除非有示例實現,否則您將無法使用它。 我在Jersey和wadl2java中分別為服務器端和Java客戶端生成器工作,這將是我下一篇文章的主題。 我一直在澤西團隊的Pavel Bucek上研究這些實現和WADL提案,非常感謝他的支持。

參考:來自Gerard Davison博客博客的JCG合作伙伴 Gerard Davison提供的WADL中的JSON-Schema 。

翻譯自: https://www.javacodegeeks.com/2012/11/json-schema-in-wadl.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370727.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎么用python自制計算公式_如何使用Python和Numpy計算r平方?

我最初發布下面的基準是為了推薦numpy.corrcoef&#xff0c;愚蠢地沒有意識到原來的問題已經使用了corrcoef&#xff0c;實際上是在詢問高階多項式擬合。我已經使用statsmodels為多項式r-squared問題添加了一個實際的解決方案&#xff0c;并且我已經離開了原始的基準測試&#…

ASP .NET SVN emmet 插件

學習 ASP .NET 時間的第三周&#xff1a; 來講講如何在 visual studio 2013...上搭載 SVN吧: 廢話不多說&#xff1a; One Step&#xff1a; 電腦上已安裝 visual studio 2013 等版本&#xff08;未安裝時 紅色區域是不存在的&#xff09; Two Step&#xff1a; 從官網上下載對…

Python之路3【知識點】白話Python編碼和文件操作(截載)

無意發現這篇文章講的比較好&#xff0c;存下來供參考&#xff1a; http://www.cnblogs.com/luotianshuai/p/5735051.html轉載于:https://www.cnblogs.com/shikaihong/p/7778880.html

Http協議入門

[在此處輸入文章標題] 1 web web入門 1&#xff09;web服務軟件作用: 把本地資源共享給外部訪問 2&#xff09;tomcat服務器基本操作 &#xff1a; 啟動: %tomcat%/bin/startup.bat 關閉&#xff1a; %tomcat%/bin/shutdown.bat 訪問tomcat主頁&#xff1a; http://loca…

計算機硬件系統都是看得見的,計算機組成硬件系統).doc

計算機組成硬件系統)各位計算機協會的成員大家好&#xff0c;很高興大家能陪我們走過這段難忘的時光。為了讓大家更好的學到東西&#xff0c;我們特地將計算機方面的東西整理成技術文檔&#xff0c;共大家使用&#xff0c;祝大家學得愉快&#xff01;湘信院計算機協會一&#x…

Google Guava –期貨

這篇文章是我在Google Guava上的系列文章的延續&#xff0c;這次涵蓋了Future。 Futures類是用于使用Future / ListenableFuture接口的靜態實用程序方法的集合。 Future是提交給ExecutorService的異步任務&#xff08;可運行或可調用&#xff09;的句柄。 Future界面提供以下方…

iptables 配置后連接不上數據庫_Linux服務器配置-VSFTP服務配置(三)

上文&#xff1a;Linux服務器配置-VSFTP服務配置(二)一、vsftpd服務防火墻配置1、主動(POST)模式 FTP 防火墻配置CentOS6 系統 iptables 的配置iptables -t filter --line-number -nL INPUT#顯示現有防火墻規則&#xff0c;查看是否開啟20、21號端口。iptables -t filter -I IN…

下標索引必須為正整數類型或邏輯類型_Python3 基本數據類型

Python中的變量不需要聲明。每個變量在使用前都必須賦值&#xff0c;變量賦值以后該變量才會被創建。在Python中&#xff0c;變量就是變量&#xff0c;它沒有類型&#xff0c;我們所說的"類型"是變量所指的內存中對象的類型。Python 3中有六個標準的數據類型&#xf…

noip模擬賽 寫代碼

分析&#xff1a;這其實就是括號匹配題&#xff0c;一眼貪心題&#xff0c;不過一開始貪錯了&#xff0c;以為([)]是合法的......其實括號之間不能嵌套. 一開始的想法是盡量往左邊填左括號&#xff0c;因為每種括號的數量都確定了&#xff0c;那么左括號和右括號的數量也就確定…

[CF797C] Minimal string(貪心,棧)

題目鏈接&#xff1a;http://codeforces.com/contest/797/problem/C 題意&#xff1a;給個字符串&#xff0c;求字典序最小的出棧順序。 一開始想用優先隊列記錄全局最小的字符&#xff0c;然后每次入棧的時候檢查當前字符是不是最小的&#xff0c;如果是那么同時pop。這樣做的…

讓我們緊縮大數據

作為開發人員&#xff0c;我們的重點是簡單&#xff0c;有效的解決方案&#xff0c;因此&#xff0c;最有價值的原則之一就是“保持簡單和愚蠢”。 但是使用Hadoop map-reduce很難堅持這一點。 如果我們要評估多個Map Reduce作業中的數據&#xff0c;那么最終將得到與業務無關但…

行內元素和塊元素以及行內塊元素的特點

一、背景 初學html&#xff0c;接觸很多標簽 <h1>、<p>、<span>、<ul>、<em>等&#xff0c;當寫出簡單的小頁面的時候&#xff0c;例如僅僅是一篇帶有標題的文章&#xff0c;標題 <h1>標簽單獨一行&#xff0c;不管后面有多大的空間&…

軟件測試的功能測試和性能測試,大型軟件的功能測試流程及性能測試流程

大型軟件具有涉及子模塊繁多、建設過程復雜、功能全面、性能具有較高要求的特點。依據ISO/IEC 9126軟件產品評估標準&#xff0c;需要對軟件的功能性、可靠性、可用性、效率、可維護性、可移植性等方面進行評估。因此&#xff0c;需要有一種方法能夠對大型軟件進行測試&#xf…

vue 分模塊打包 腳手架_Vue面試官最愛的底層源碼問題,你可以這樣回答!

最近看到身邊很多人都在投簡歷&#xff0c;有因為企業裁員的&#xff0c;有因為自己想跳槽的&#xff0c;原因不一&#xff0c;但是最終大家都會需要接觸到面試這個事情。但是很多人對待面試不夠認真&#xff0c;只會等待結果&#xff0c;不去努力。所以這邊想整理一些懶人面試…

re.containerbase.startinternal 子容器啟動失敗_Python項目容器化實踐(二) Docker Machine和Docker Swarm...

前言這篇文章介紹Docker生態中的常被提到的Engine、Machine和Swarm&#xff0c;大家以了解為主&#xff0c;工作需要再深入。EngineDocker Engine其實就是我們常說的「Docker」&#xff0c;它是一個C/S模型(Client/Server)的應用&#xff0c;包含如下組件:Daemon。守護進程&…

基于設備樹的TQ2440的中斷(2)

下面以按鍵中斷為例看看基于設備數的中斷的用法&#xff1a; 設備樹&#xff1a; tq2440_key {compatible "tq2440,key";interrupt-parent <&gpf>;interrupts <0 IRQ_TYPE_EDGE_FALLING>, <1 IRQ_TYPE_EDGE_FALLING>;key_3 <&gpf 2…

計算機里有個不能進入的磁盤分區,新電腦只有一個分區怎么辦? 教你們如何不進pe給硬盤創建新分區!...

很多朋友新電腦剛買回來打開發現明明自己機械硬盤1T或者1T機械加128G固態&#xff0c;但是卻只有一個或者兩個分區&#xff0c;但是又不會分區現在教大家如何不用老毛桃大白菜之類的進pe系統里面就能直接創建新分區1 WinR輸入diskmgmt.msc2進入磁盤管理可以查看本機的C盤與E盤的…

OSGi中的權限

在上一篇文章中 &#xff0c;我們介紹了為Java應用程序實現沙箱的方法&#xff0c;在其中我們可以安全地運行移動代碼 。 這篇文章探討了如何在OSGi環境中執行相同的操作。 OSGi OSGi規范 為Java定義了一個動態模塊系統 。 因此&#xff0c;它是實施那種可以使您的應用程序動…

HTTP簡單教程

目錄 HTTP簡介 HTTP工作原理 HTTP消息結構 客戶端請求消息服務器響應消息實例 HTTP請求方法HTTP響應頭信息HTTP狀態碼 HTTP狀態碼分類HTTP狀態碼列表 HTTP content-type對照表 HTTP簡介 HTTP協議是Hyper Text Transfer Protocol&#xff08;超文本傳輸協議&#xff09;的縮寫&…

Reversed-Z詳解

在3D渲染管線中&#xff0c;Z這個家伙幾乎無處不在&#xff0c;如Z-Buffer&#xff0c;Early-Z&#xff0c;Z-Cull&#xff0c;Z-Test&#xff0c;Z-Write等等&#xff0c;稍有接觸圖形學的人都會對這些術語有所耳聞。 那么Z到底是什么呢&#xff1f;首先Z當然可以是任意坐標系…