REST是否支持协议缓冲区?

15

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


3
PB最终只是一种数据格式。就REST而言,资源表示可以以服务器和客户端之间协商的任何数据格式发送。在“RESTful方程式”中没有任何东西表明一种数据格式比另一种数据格式更符合RESTful。 - Paul Samsotha
可能是 通过 REST 发送协议缓冲区 的重复问题。 - David Brossard
2个回答

31

是的,您完全可以结合使用Protobuf和REST。

Protobuf指定了一种编码数据的方式。 REST指定与资源交互的方式,但不需要特定的资源主体编码。如果您创建一个RESTful基于HTTP的API,并使用Protobuf来编码实体正文(HTTP请求或响应的有效负载部分的技术术语),那么您同时使用了REST和Protobuf。


4
请提供一个代码示例,展示如何使用REST Easy客户端向REST POST服务发送protobuf消息。我一直在寻找答案,但迄今为止没有找到有用的信息。 - Bibek Kr. Bazaz
@BibekKr.Bazaz 抱歉,我不熟悉“REST Easy Client”。 - Kenton Varda
1
嗨Kenton,我已经找到了解决方案。我按照以下链接中的教程进行操作。[https://javarants.com/using-jax-rs-with-protocol-buffers-for-high-performance-rest-apis-563ce40d15d9] 我使用了Jersey Client而不是RestEasy client,但是思路应该是类似的。在服务端,我们需要编写consumes=application\x-protobuf以进行post服务。此外,从客户端方面来看,我们需要提供protobuff读取器和写入器以通过rest发送protobuff。这些读取器和写入器基本上将protobuff转换为输入/输出流。 - Bibek Kr. Bazaz

-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 注释方法返回的响应转换为协议缓冲区消息。

重要的是,我们正在处理特定于协议缓冲区的数据 - 而不是标准的 POJOs。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接