这可能是一个非常通用的问题,但考虑到REST专注于通过单个一致的接口访问命名资源这一事实;它支持协议缓冲区吗?
答案 0 :(得分:4)
是的,你绝对可以将Protobuf和REST结合起来。
Protbuf指定了一种编码数据的方法。 REST指定了与资源交互的方法,但不需要对资源主体进行任何特定编码。如果您创建一个RESTful基于HTTP的API并使用Protobuf对实体主体进行编码(HTTP请求或响应的有效负载部分的技术术语),那么您正在使用REST和Protobuf。
答案 1 :(得分:-1)
我很想回答是和否。
REST是一种强烈基于HTTP协议的架构风格。例如,它使用HTTP动词。这是一个值得注意的差异,比如SOAP,它故意与底层传输(HTTP ...)
分离REST代表Representational State Transfer。 (有时候 spelled" ReST&#34 ;.)它依赖于无状态的客户端服务器,可缓存 通信协议 - 实际上在所有情况下都是HTTP 使用协议。 REST是一种用于设计的架构风格 网络应用程序。
资料来源:rest.elkstein.org/2008/02/what-is-rest.html
也就是说,当定义一个RESTlike架构,你发布资源和获取资源时,你肯定可以使用你想要的任何传输和序列化机制。所以你可以使用Proto Buffers或Thrift。如果你愿意,可以称之为务实的REST。
值得理解为什么REST首先出现。回过头来,有EAI的概念 - 企业应用程序集成。那是沉重,笨重,坚硬和技术特定的。它使用了CORBA(Java)或COM和DCOM(.NET)之类的东西。这很艰难。
然后人们想:让我们发明一个可互操作的标准。这就是SOA(面向服务的体系结构)和SOAP的结果(SOAP在某种程度上意味着简单的对象访问协议,但它也有另一种含义)。 SOAP非常棒,因为它是让不同机器和语言互操作的标准。因此,您可以将Java消息中的SOAP消息发送到.Net程序。 SOAP将使用XML作为序列化格式,并且几乎总是使用HTTP作为传输,但不一定如此。 SOAP具有传输绑定的概念,允许不同的传输。
SOAP带有一长串称为WS- *的标准(例如WS-Security,WS-ReliableMessaging,WS-Eventing ......)。最终它得到了太多,人们称之为WS-DeathStar。
REST和JSON就是由此产生的。 REST声明我们应该利用HTTP给我们的东西,而不是像SOAP那样忽略它(SOAP发明了SOAPACtion)。同时,尖括号(<)不合时宜,花括号是热门的新项目(})。 JSON开始取代XML。
REST和JSON相对于XML成功的一些原因是:
答案 2 :(得分:-2)
回到未来,有这个Spring REST API with Protocol Buffers教程:
使用以下方法生成相应的 Java 类:
protoc --java_out=java resources/baeldung.proto
在您的 Maven 的 POM 文件中添加以下依赖项:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.0.0-beta-3</version>
</dependency>
将以下转换器添加到您的@SpringBootApplication:
@Bean
ProtobufHttpMessageConverter protobufHttpMessageConverter() {
return new ProtobufHttpMessageConverter();
}
ProtobufHttpMessageConverter bean 用于将@RequestMapping 注释方法返回的响应转换为协议缓冲区消息。
这里重要的是,我们使用的是协议缓冲区特定的数据,而不是标准的 POJO。