山西天镇建站哪家好,站长之家网址查询,免费行情软件app网站红色,农产品电商营销策划方案WADL#xff08; Web应用程序描述语言 #xff09;对REST而言#xff0c;WSDL对SOAP而言。 这种语言的仅仅存在引起了很多争议#xff08;请参阅#xff1a; 我们需要WADL吗#xff1f; 或者 需要 WADL还是不需要WADL #xff09;。 我可以想到使用WADL的一些合法用例 Web应用程序描述语言 对REST而言WSDL对SOAP而言。 这种语言的仅仅存在引起了很多争议请参阅 我们需要WADL吗 或者 需要 WADL还是不需要WADL 。 我可以想到使用WADL的一些合法用例但是如果您已经在这里则可能不打算再进行讨论。 因此让我们继续前进到WADL本身。 原则上WADL与WSDL类似但是语言的结构有很大不同。 虽然WSDL定义了使用或产生其中一些消息和操作的平面列表但WADL强调了RESTful Web服务的分层性质。 在REST中主要工件是资源。 每个资源名词都表示为URI。 每个资源都可以定义CRUD操作动词作为HTTP方法实现和嵌套资源。 嵌套资源与父资源有很强的关系通常代表所有权。 一个简单的示例是表示书籍列表的http://example.com/api/books资源。 您可以HTTP获取此资源这意味着检索整个列表。 您还可以获取http://example.com/api/books/7资源以在books资源中获取第7本书的详细信息。 或者您甚至可以使用相同的URI放置新版本或完全删除资源。 您不仅仅局限于一个嵌套级别获取http://example.com/api/books/7/reviews?page2size10将会检索第二本书最多10本书的第二页最多10个条目。 显然您也可以在书籍旁边放置其他资源例如http://example.com/api/readers 就像WSDL人员能够做到的那样要求正式而精确地描述每个可用资源方法请求和响应。 WADL是描述“可用URI”的选项之一尽管有些人认为编写良好的REST服务应该是自描述性的请参阅HATEOAS 。 但是这是一个简单的空WADL文档 application xmlnshttp://wadl.dev.java.net/2009/02resources basehttp://example.com/api/
/application 这里没什么好看的。 请注意 resources标记定义了基本API地址。 我们将要添加的所有命名资源都相对于该地址。 您还可以定义几个resources标记来描述多个API。 因此让我们添加一个简单的资源 application xmlnshttp://wadl.dev.java.net/2009/02resources basehttp://example.com/apiresource pathbooksmethod nameGET/method namePOST//resource/resources
/application 这使用两种可能的方法在http://example.com/api/books下定义资源GET用于检索整个列表而POST用于创建添加新项目。 根据您的要求您可能还希望允许DELETE方法删除所有项目并且WADL负责记录允许的内容。 还记得我们开头的示例 / books / 7吗 显然7只是一个示例我们不会在WADL中声明所有可能的书ID。 而是有一个方便的占位符语法 application xmlnshttp://wadl.dev.java.net/2009/02resources basehttp://example.com/apiresource pathbooksmethod nameGET/resource path{bookId}param requiredtrue styletemplate namebookId/method nameGET//resource/resource/resources
/application 您应注意两个重要方面首先使用{ bookId }占位符代替嵌套资源。 其次为了清楚起见我们正在使用 param /标记记录此占位符。 我们很快将看到如何将其与方法结合使用。 为了确保您仍然与我在一起上面的文档介绍了GET / books和GET / books / some_id资源。 application xmlnshttp://wadl.dev.java.net/2009/02resources basehttp://example.com/apiresource pathbooksmethod nameGET/resource path{bookId}param requiredtrue styletemplate namebookId/method nameGET/method nameDELETE/resource pathreviewsmethod nameGETrequestparam namepage requiredfalse default1 stylequery/param namesize requiredfalse default20 stylequery//request/method/resource/resource/resourceresource pathreadersmethod nameGET//resource/resources
/application Web服务变得越来越复杂但是它描述了很多操作。 首先 GET / books / 42 / reviews是有效的操作。 但是有趣的部分是嵌套的request /标记。 如您所见我们可以独立描述每种方法的参数。 在我们的案例中定义了可选的查询参数与之前用于URI占位符的模板参数相反。 这为客户端提供了有关可接受的页面和大小查询参数的其他知识。 这意味着/ books / 7 / reviewspage 2size 10是有效的资源标识符。 我是否提到过每个资源方法和参数都可以按照WADL规范附加文档 我们将在这里停止仅提及WADL的其余部分。 首先到目前为止您可能已经猜到了每个method /都有一个response /子标记。 请求和响应都可以定义请求或响应必须遵循的确切语法例如在XML Schema中。 该响应还可以记录可能的HTTP响应代码。 但是由于我们将使用到目前为止在代码优先应用程序中获得的知识因此我特意留下了grammars /定义。 WADL是敏捷的它使您可以定义所需的尽可能少的信息。 因此我们知道了WADL的基础知识现在我们想使用它可以作为基于Java的应用程序的使用者或生产者。 幸运的是该语言本身有一个wadl.xsd XML Schema描述我们可以使用它来生成可使用JAXB注释的POJO使用JDK中的xjc工具 $ wget http://www.w3.org/Submission/wadl/wadl.xsd
$ xjc wadl.xsd 在那里...挂了 软件开发人员的生活充满挑战和非凡的问题。 有时这只是一个令人讨厌的网络过滤器可疑数据包连同您半个小时的生命消失了。 一旦您回想起2008年左右写的文章 W3C的DTD流量过大 就不难发现问题了 xs:import namespacehttp://www.w3.org/XML/1998/namespaceschemaLocationhttp://www.w3.org/2001/xml.xsd/ 从浏览器访问xml.xsd会立即返回HTML页面但是xjc工具将永远等待。 在本地下载此文件并更正wadl.xsd中的schemaLocation属性有助于。 总是小事…… $ xjc wadl.xsd
parsing a schema...
compiling a schema...
net/java/dev/wadl/_2009/_02/Application.java
net/java/dev/wadl/_2009/_02/Doc.java
net/java/dev/wadl/_2009/_02/Grammars.java
net/java/dev/wadl/_2009/_02/HTTPMethods.java
net/java/dev/wadl/_2009/_02/Include.java
net/java/dev/wadl/_2009/_02/Link.java
net/java/dev/wadl/_2009/_02/Method.java
net/java/dev/wadl/_2009/_02/ObjectFactory.java
net/java/dev/wadl/_2009/_02/Option.java
net/java/dev/wadl/_2009/_02/Param.java
net/java/dev/wadl/_2009/_02/ParamStyle.java
net/java/dev/wadl/_2009/_02/Representation.java
net/java/dev/wadl/_2009/_02/Request.java
net/java/dev/wadl/_2009/_02/Resource.java
net/java/dev/wadl/_2009/_02/ResourceType.java
net/java/dev/wadl/_2009/_02/Resources.java
net/java/dev/wadl/_2009/_02/Response.java
net/java/dev/wadl/_2009/_02/package-info.java 由于我们将在基于Maven的项目中使用这些类并且我讨厌将生成的类提交到源存储库因此让我们将xjc执行移至maven生命周期 plugingroupIdorg.codehaus.mojo/groupIdartifactIdjaxb2-maven-plugin/artifactIdversion1.3/versiondependenciesdependencygroupIdnet.java.dev.jaxb2-commons/groupIdartifactIdjaxb-fluent-api/artifactIdversion2.0.1/versionexclusionsexclusiongroupIdcom.sun.xml/groupIdartifactIdjaxb-xjc/artifactId/exclusion/exclusions/dependency/dependenciesexecutionsexecutiongoalsgoalxjc/goal/goals/execution/executionsconfigurationarguments-Xfluent-api/argumentsbindingFilesbindings.xjb/bindingFilespackageNamenet.java.dev.wadl/packageName/configuration
/plugin 嗯 pom.xml并不是有史以来最简洁的格式……没关系在每次编译之前这都会在编译源代码之前生成WADL XML类。 我还喜欢通顺-API插件 与*与普通制定者一起的方法增加了 这回允许链接。 很方便 最后我们为生成的工件定义更合适的包名称如果您发现net.java.dev.wadl._2009._02足够好的包名称则可以跳过此步骤并将Wadl前缀添加到所有生成的类bindings.xjb文件中 jxb:bindings version1.0xmlns:jxbhttp://java.sun.com/xml/ns/jaxbxmlns:xshttp://www.w3.org/2001/XMLSchemaxmlns:xjchttp://java.sun.com/xml/ns/jaxb/xjcjxb:extensionBindingPrefixesxjcjxb:bindings schemaLocation../xsd/wadl.xsd node/xs:schemajxb:schemaBindingsjxb:nameXmlTransformjxb:typeName prefixWadl/jxb:anonymousTypeName prefixWadl/jxb:elementName prefixWadl//jxb:nameXmlTransform/jxb:schemaBindings/jxb:bindings/jxb:bindings 现在我们准备使用JAXB和POJO类以XML格式生成和使用WADL。 有了这些知识和基础我们就可以开发一些有趣的库了这将是下一篇文章的主题。 参考 Java和社区博客上我们的JCG合作伙伴 Tomasz Nurkiewicz 对WADLJava的简要介绍。 翻译自: https://www.javacodegeeks.com/2012/01/wadl-in-java-gentle-introduction.html