目前我有一个RESTful Web服务,其端点通过Jersey/JAX-RS公开:
@Path("/widgets")
public class WidgetResource {
@GET
List<Widget> getAllWidgets() {
// gets Widgets somehow
}
@POST
Widget save(Widget w) {
// Save widget and return it
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Jackson将我的POJO序列化/反序列化为JSON,我的服务都响应并发送回我的POJO application/json.
我现在希望可能使用Google协议缓冲区(或等效技术)来帮助压缩/优化客户端和服务之间的通信,因为JSON /文本相当庞大/浪费.
实际上,我有一个庞大的后端,包括一个"微服务"架构; 数十个REST服务相互通信; 这就是为什么我希望优化在所有这些之间来回发送的消息.
所以我问:是否仍然可以让Jersey/JAX-RS提供我的服务端点,但要删除Jackson/JSON的内容并用Google协议缓冲区替换它?如果是这样,这段代码可能是什么样的?
在RESTful API中,很典型的做法是查看可以支持多种序列化格式的端点:
// Sends back "fizz" resource that has an id=34 as a JSON object
http://api.example.com/v2/fizz/34.json
// Sends back "fizz" resource that has an id=34 as an XML object
http://api.example.com/v2/fizz/34.xml
// Sends back "fizz" resource that has an id=34 as a binary object,
// say, using Google Protocol Buffers
http://api.example.com/v2/fizz/34.bin
Run Code Online (Sandbox Code Playgroud)
我正在设计一个Dropwizard服务,并试图弄清楚如何实现多种格式支持,但是在这方面文档很贫乏。有任何想法吗?