【发布时间】:2017-05-11 06:28:57
【问题描述】:
我发现向 Google 正确提出我的问题有点困难。
我正在构建一个 REST Web 服务,它可以接受和返回 XML 和 JSON 媒体类型。我的客户可以使用Content-Type 标头决定向我的服务发送什么(如果是POST),以及使用Accept 标头作为响应接收什么。
但是,我的问题是,我能否创建一个 Web 服务,使其只能接受 JSON(即客户端必须设置Content-type=application/json),但该服务可以返回 XML仅(客户端必须设置Accept=application/xml)?
虽然这在技术上是可行的,但我想知道这是否是一种好的做法,是否有任何 REST Web 服务的通用实现,其中客户端可以指定特定的 Content-Type 但不同的 Accept 标头。
假设我已经实现了如下所示的服务:
@POST
@Path("/users")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public User createUser(User user) {
/* Do something */
return user;
}
在上述情况下,客户端可以将 Post 数据以 JSON 格式发送,但期望以 XML 格式接收响应,反之亦然。
这真的是一个好习惯吗? REST 服务是否应该或不应该强调返回具有与其接受的相同媒体类型的内容?比如,消费application/xml时产生application/xml,消费application/json时产生application/json等等?
【问题讨论】:
-
这一切都取决于您的要求,因为您正确地提到它在技术上是可行的,现在取决于您的要求,您可以实施它,尽管现在数据传输的事实标准是 JSON。跨度>
-
如果不了解更多关于您的项目要求和决定其成功的业务驱动因素,我认为没有人可以就此提出建议。这是需求级别的决定,而不是工程级别的决定。
标签: java json xml web-services rest