有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Rest服务契约如何公开

当我编写一个soap服务时,很容易向我的客户提供一个合同,说明我的服务期望得到什么。如何调用它,返回类型等。 当我的客户知道我的服务的URL并用WSDL语言描述时,他们可以自己生成这个契约

什么是最佳实践?例如,我新创建的rest服务只有两种方法:

1)ping服务不需要请求有效负载,只要在响应体中返回一个普通字符串“OK”(如果它正在运行)。 来自浏览器的GET请求如下http://localhost:8080/rest/ping)。没有请求参数,也没有请求正文

2)第二个是创建用户服务,它需要一个用户对象作为输入,名字和姓氏作为必填字段。 它在json表示的响应体中将新创建的用户返回给客户机

来自邮递员的POST请求可以如下所示:http://localhost:8080/weather/rest/weather/。 它没有请求参数,但包含一个请求正文,即“{”firstname:“john”,“lastname:“smith”}”。在本例中,字符串表示为json。 (是否需要?是否有更好的方式将“对象”发送到我的服务?)。这两项都是强制性的,我想告诉我的客户这一点

响应是用户发送回客户端的,除了提供的名字和姓氏之外,还包括我的服务生成的电子邮件地址字段。 它看起来是这样的:{“firstname”:“john”,“lastname”:“smith”,“email”:“john”。smith@example.org}并且在响应体中。同样,是否有更好的方法将“对象”返回到 客户端比将它们表示为json更好吗

So tl;dr:向我的客户“公开”这些服务的最佳方式是什么,而不必口头说明如何使用它。 另外,在使用rest时,没有通常使用的WSDL契约或类似契约

谢谢你抽出时间。希望这不是一个类似问题的复制品


共 (1) 个答案

  1. # 1 楼答案

    在这个问题上以正确的方式回答是非常复杂的,因为REST与SOAP不同,它是一种体系结构样式,而不是协议。很多时候,您可以在internet上发现,用于描述rest ws的rest方式是WADL(WADL on wikipedia),它对于“crud”rest ws很好,但在我看来,更好的方式是使用RSDL(RSDL on wikipedia),因为它包括rest ws的一些重要方面,如超媒体链接描述、用于uri的http hader定义等等。HoVEWER的关键点是,REST不是一个框架或协议,REST意味着拥抱Web能力来构建松散耦合的分布式系统,即使你有一个Excel XML或类似的东西来描述你的实现,你也应该把这个方面看作缓存,正确使用HTTP IDENM域协议,超媒体控件的含义以及它如何描述应用程序域协议等非常复杂。不幸或幸运的是,不存在一种像SOAP那样描述rest ws的方法,因为您应该描述您的行为api、架构方面和应用程序协议。事实上,任何api都是一种资源,它是一种通过超媒体控件描述应用程序状态的资源表示形式

    对于本次讨论中的许多细节,我可以建议您阅读《实践中的休息》一书,我认为这是一封非常有趣和解释性的信

    我希望这能帮助你