3

我试图公开一个返回多页文档的 RESTful URL。在我看来,使用 PDF 非常简单。

GET /documents/12345.pdf

但我也希望使用图像格式公开相同的文档,其中每个页面都是单独的 jpg。我将如何最好地构建 URL?

到目前为止,我在

GET /documents/12345/page1.jpg

或者

GET /documents/12345.jpg?page=1

或者

GET /document/12345?page=1&type=jpg

我知道没有绝对正确的方法可以做到这一点,我只是在寻找最直观的方法。我花了很多时间来研究这个,以至于我无法说出我最喜欢哪一个,或者即使有更好的替代方法。

谢谢!

4

2 回答 2

4

资源

您的资源就是文档。PDF 和 JPEG 是该资源的两种表示形式。所以两者都可以在

/documents/12345

内容协商

客户如何选择 PDF 或 JPEG?这就是HTTP 标头Accept的用途。

GET /documents/12345
Accept: image/jpeg

对于 JPEG 表示,

GET /documents/12345
Accept: application/pdf

用于 PDF 表示。

页面

现在我们仍然有页面的问题。在这里,我建议遵循评论中提到的方法:

GET /documents/12345/1
Accept: image/jpeg

对于 JPEG 表示的第 1 页。

问题

还有一个小问题:这个请求会发生什么?

GET /documens/12345/1
Accept: application/pdf

PDF 表示的“第 1 页”是否作为单独的实体存在?也许有,如果您的 RESTful 服务可以生成它。

但我们还没有完成。这个请求会发生什么?

GET /documents/12345
Accept: image/jpeg

是否有 JPEG 表示的单页版本?同样,如果您的 RESTful 服务可以生成它,也许有。也许它可以生成一页合一的 JPEG。如果不能,返回404 Not Found

于 2012-10-19T14:10:27.033 回答
1

怎么样

GET /documents/pdf/12345

GET /documents/jpg/12345/1

使用REST时,我更喜欢在不使用参数或查询字符串的情况下公开资源。这样它就符合 RESTful 语法,并且更容易使用 ASP.NET MVC 中的内置路由进行解析。

就像@Tichodroma 关于 Http Headers 所说的那样,在使用 REST 时通常不推荐使用自定义 HTTP 标头。看看这里以获得很好的解释:

REST:HTTP 标头或请求参数

于 2012-10-19T14:08:23.977 回答