【问题标题】:Restful providing and consuming Web Service javaRestful提供和使用Web Service java
【发布时间】:2016-10-19 10:57:38
【问题描述】:
在提供 Restful Web 服务(在 java 中)时,有没有办法像在 soap 服务 wsdl 中一样公开服务内部的方法及其参数?
Web 服务的消费端如何知道可以使用的可用方法是什么? (我只想通过它的 URL 使用 Web 服务)。
我正在使用带有 Apache Tomcat 的 NetBeans 8.0.2。
非常感谢。
【问题讨论】:
标签:
rest
restful-architecture
restful-url
discoverability
【解决方案1】:
看Richardson Maturity Model,REST都是关于Resources,可以在上面应用HTTP Verbs(而不是“方法”),发现/通过Links暴露.例如,在您的 API 的顶层,客户端可能会注意到 products-query 关系,该关系会在通过 GET 请求访问后检索产品资源列表 - 等等。
实现此目的的另一种方法是将Swagger 连接到您的 API 之上。
【解决方案2】:
正如@Alexandru 指出的 Richardson 成熟度模型,对于真正的 RESTful 服务或客户端,最后一个级别(通常从索引 0 开始为 3)已经到位,否则它不是“真正的”RESTful。
REST 背后的核心思想是将分布式客户端和服务器解耦,类似于 Web 浏览器与任何 Web 服务器完全分离。此外,类似于从某个起始页开始然后使用链接浏览页面的传统 Web 会话,这同样适用于从某些基本资源开始然后使用返回的 URI 导航到新资源的 RESTful 内容。
每个 URI 都以协议标识符开头,该标识符定义了可以对引用的资源执行的可能操作或方法。大多数情况下,这将是 HTTP,但不限于此,还可以使用 mailto、FTP 或类似的东西。因此,相应的协议规范也是关于可能操作的文档。
需要传递给 URI 的参数要么已经由先前请求的响应设置,要么可能是模板化的,因此由客户端动态设置。在这里,客户需要了解如何处理模板以及从哪里获取可能的值。然而,这也可以包含在响应中,类似于 Web 表单,其中某些选项也由服务器提供。各自的media-type(即application/atom+xml或application/hal+json)通过赋予内容更多的语义价值来支持客户端处理数据,甚至可能定义目标可以用来简化其工作的某些结构。