什么是RESTDL WS中的WSDL等价物。如果没有,消费者如何生成所需的客户端类?

时间:2014-03-15 18:10:03

标签: java web-services rest jax-rs

说,我在java网络中有生产者,在dot网络中有消费者。制片人有一个方法 Employee作为方法参数并在db。中创建员工。

对于基于SOAP的ws,dot net client将命中WSDL并创建存根(包括dot net中的员工数据表示)。现在它可以填补 对象并发送给制作人。

我不确定它在restful webservices中是如何工作的,因为没有WSDL。休息的消费者将如何知道什么是操作  生产者在没有任何WSDL合同的情况下暴露出来,以及dot net consumer将如何获得存根(如员工数据对象)以便它可以简单地填充并发送?

我知道在休息时有WADL(与WSDL并行)但看起来不是很突出,而且现在还不是标准。

我没有得到客户端代码如何生成EmployeeData类,以便它可以填充它并发送给生产者?客户端是否会手动创建额外的类(而不是使用客户端可用的实用程序在WSDL的基础上生成的代理EmployeeData)?即使客户端必须手动完成,客户端如何知道没有wsdl或wadl的EmployeeData类的类定义是什么?

2 个答案:

答案 0 :(得分:7)

REST的一个重要概念是HATEOAS or Hypermedia as the Engine of Application State。这意味着您的客户端通过服务提供的超媒体链接与REST服务进行交互。

您的REST Web服务有一个入口点,比如http://yourhost.com/rest。您的客户端将首先将请求发送到该URL。您的服务将使用描述部分或全部可访问资源以及如何访问它们的资源进行响应。您不断发现并关注链接。这就是API发布(和发现)的方式。

这是一个描述这个概念的精彩视频:Hypermedia APIs.

通过HATEOAS,您只需按照超媒体链接即可完全发现您的服务API。


REST中没有top down/bottom up设计的概念。

REST是关于资源的,而不是关于方法调用的,这基本上是WSDL描述的内容。

  

即使客户必须手动完成,客户如何知道它是什么   没有wsdl或wadl的EmployeeData类的类定义?

它不会需要来创建EmployeeData课程。假设您需要创建一个新的Employee,您将向/employees发送一个GET请求,该请求可能会返回包含如何执行此操作的响应。这可能是像这样的XHTML响应(除其他外)

<form class="new-employee" action="/context/employees" method="PUT" >
    <input type="text" name="employee_name" />
    <input type="text" name="employee_age" />
    <input type="submit" name="submit" />
</form>

响应包含创建新员工时需要遵循的确切格式。您需要使用包含这些表单参数的HTTP PUT请求将表单提交给/context/employees。这是HATEOAS。超媒体链接是/context/employees。引擎通过PUT请求跟随此链接。应用程序状态是在此请求之后,将存在新员工。

答案 1 :(得分:1)

假设您正在使用基于Json的WS - 有一些工具可以帮助您:

  1. 有json解析器,可以将json或json模式文件转换为POJO类,并添加Json解析库使用的一些注释 - 请看这里:http://www.jsonschema2pojo.org/
  2. 我不知道任何可以根据所有API调用生成服务器存根的自动化工具,但是有一个很好的库可以使用它 - https://github.com/square/retrofit - 你还必须放置补丁和方法签名到interfase,但它更方便与#34;纯粹&#34;的java。
  3. 还有一些非常好的工具可以帮助生成和格式化WS的文档 - 我最喜欢的一个是招摇:https://helloreverb.com/developers/swagger
  4. 没有(或者至少我不知道)工具允许生成存根,数据类等,因为它通常可以通过WSDL文件完成。