相同实体和内容协商的不同REST-ful表示

时间:2013-02-28 12:50:22

标签: xml rest content-negotiation

鉴于REST-ful Web服务

/product/{product-id}

返回Content-Type

的Product XML文档
x-esvc/product+xml

我还需要支持

x-esvc/prices+xml

(x-esvc是一种自定义MIME类型;产品和价格是两种子类型,而+ xml暗示它是基于XML的格式,按照RFC 3023

问题是第二种格式是否应该有自己的网络服务

/prices/{product-id}

...或者我是否应该使用内容协商和Accept HTTP标头来区分现有产品Web服务中的两种格式?

请注意,只涉及一个真实实体(产品),“价格”是OO术语中的依赖对象列表。但是,在这两种情况下都可以使用相同的标识符。

制定问题的另一种方法是,“价格”是否可以被视为同一资源的不同表示,或者如果信息不同,是否应将其视为另一种资源?

我知道内容协商通常用于区分同一图像的不同技术格式,如JPG和PNG;即信息相同但格式不同。在这种情况下,内容协商将用于区分同一实体的不同信息。

这是否可以有效地使用REST-ful Web服务中的Content Negotiation和Accept HTTP标头?

1 个答案:

答案 0 :(得分:0)

我喜欢不同的网络服务。它简化了任何消费者的使用,因为通过单独指定URL可以完全表达请求。这可能与您项目的当前阶段无关,但随着它的发展可能会发生变化 - 组装和维护Web服务调用更容易,而不必使用请求标题。

如果您不需要/想要这个分离服务器端,您仍然可以通过Web服务器配置中的指令统一两个URL位置。

操作Web服务也可能变得更容易:考虑负载平衡和维护停机时间。

根据您项目的规模,您的里程可能会有所不同。对于一些内部PoC,你可能最好依附于你拥有的东西。