REST是否支持协议缓冲区

时间:2016-02-10 04:38:00

标签: rest protocol-buffers

这可能是一个非常通用的问题,但考虑到REST专注于通过单个一致的接口访问命名资源这一事实;它支持协议缓冲区吗?

3 个答案:

答案 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成功的一些原因是:

  1. 轻量级(更紧凑)
  2. 更容易处理更多语言。
  3. 人类可读(据说)

答案 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。