REST是API还是:REST vs Java接口?

REST是API还是:REST vs Java接口?,java,xml,api,rest,standards,Java,Xml,Api,Rest,Standards,我和一位同事讨论了一下,他真的很喜欢休息,但我还是要相信它的好处 我的主要问题是,从消费应用程序的角度来看,我并没有真正将REST视为API或接口。让我详细说明一下。我们有两个应用程序,其中一个使用RESTful API调用另一个。这是使用JAX-RS和RESTeasy实现的。不过,使用RESTeasy,也可以基于该接口生成REST客户机 让我们假设这是一个处理书籍和作者的系统。应用程序需要了解一本书,假设它已经知道一些ID 在REST中,它将调用例如http://server/book/21

我和一位同事讨论了一下,他真的很喜欢休息,但我还是要相信它的好处

我的主要问题是,从消费应用程序的角度来看,我并没有真正将REST视为API或接口。让我详细说明一下。我们有两个应用程序,其中一个使用RESTful API调用另一个。这是使用JAX-RS和RESTeasy实现的。不过,使用RESTeasy,也可以基于该接口生成REST客户机

让我们假设这是一个处理书籍和作者的系统。应用程序需要了解一本书,假设它已经知道一些ID

  • 在REST中,它将调用例如
    http://server/book/21
    ,获取返回的任意有效负载,并将其反序列化为
    Book
    对象
  • 使用RESTeasy客户端,我们有一个接口
    BookService
    和一个方法
    bookgetbook(intbookid)
    ,我们只需调用
    getBook(21)
    并返回一个
    Book
    对象
我想说的一点是,
BookService
是一个定义良好的接口,作为程序员,您可以很容易地看到它期望的参数是一个标识符,它将返回一个
Book
对象。使用“justrest”,我们访问一些URL,然后得到返回的任意数据。没有定义良好的接口,您不知道如何在不了解服务器内部URL信息的情况下构建URL,您必须“手动”解析XML(希望使用XSD)

还有一件事。我提到了书籍和作者

使用界面时,您可以使用
BookService
returning
Book
s和
AuthorService
returning
Author
s。
Book
可以有一个属性
authorId
,您可以通过调用
Author getAuthor(int authorId)
获得一个
Author
对象

使用REST时,调用图书URL并返回有关作者的一些信息,包括指向作者的链接。然后,您可以按照链接获取有关作者的更多信息。但是你怎么知道在哪里可以找到这个链接呢?同样的问题也出现了:如何构造链接,如何解析返回数据

当两者混合时,奇怪的事情就会发生。如果我只想通过id获取一本
Book
,我可以调用
BookService
(它在内部以任何方式转换为REST调用)并获取一个漂亮的
Book
对象。但是如果我想获取作者信息,我有这个
字符串authorLink
,我必须按照它来获取我的
作者
对象。但反过来,当我的起点是一个
作者
并使用
AuthorService
检索它时,我会在指向图书对象的字符串(URL)集合中获得指向作者所写图书的链接

那么为什么REST被认为是API呢?为什么我更喜欢REST而不是定义良好的(Java)接口?如何将两者混合使用?

在您选择的搜索引擎上查看

有一些很好的文献将解释您如何“知道”调用什么、使用什么请求。特别是


为什么是超媒体API?REST是一个非常松散和淡化的术语。通常执行不正确。最近出现了一股试图消除这种混乱的热潮,因此出现了“新”术语。正确完成后,您将获得REST(请参阅超媒体API)服务的强大功能,该服务具有您熟悉的漂亮风格的接口,可以使用Java/中的强类型服务(ala SOAP、RPC)。NET

REST不是一个API,而是一个更大的体系结构。REST用于通过现有HTTP协议在两个不同系统之间进行通信。REST在很多方面都很有意义,也许在你的情况下你不需要使用它。

无论出于什么原因,没有人以罗伊·菲尔丁设想的方式使用REST。所以这是不切实际的。对于懒惰的人来说,这就足够了,不必去想它


显然,业界一直热衷于为RPC发明不同的名称。

简而言之,RESTAPI对于其他编程语言来说是灵活的

我不熟悉RESTEasy,但熟悉RESTful服务。休息没有标准。大多数REST服务发布如何与其RESTAPI交互。可用的URL(资源)、要发送的内容类型和将返回的类型。好的还将发布返回的http状态码以及如何处理错误。在您的情况下,我想知道REST Easy客户到底在做什么。它只是将API调用转换为HTTP请求并为开发人员处理所有事情吗

我们记录RESTAPI调用,并提供一个包含所有模型的jar文件。这些模型使用JAXB注释,因此开发人员不需要了解服务返回的XML或JSON的所有信息。如果他们使用Java和我们的模型。发布和记录API的好处在于,其他语言的开发人员可以使用该服务,只要他们可以发出HTTP请求。这使得开发者可以用几乎任何编程语言开发客户端应用程序。(最近似乎更多的是C#实现)

除了提供模型的jar文件外,我们还在文档中为非Java开发人员提供XSD。

如果您考虑REST(架构而非设计或编码风格)关于构建分布式应用程序/系统的工具,那么主要目的是使用众所周知且经验证的概念(在万维网上)为了管理应用程序状态,在某些情况下使用它是有意义的

当您想要将一些处理/计算从一个应用程序移动到某个远程主机(比如检索书籍列表)时,您可以通过将方法调用(GetBooks)序列化到SOAP消息中,然后将该消息添加到http请求等中来实现。。或者你可以直接用c