我正在尝试公开一个返回多页文档的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
我知道没有绝对正确的方法可以做到这一点我只是在寻找最直观的方法。我花了很多时间看这个,我不知道哪一个我最喜欢,或者即使有另一种方法会更好。
谢谢!
答案 0 :(得分:4)
资源
您的资源就是文档。 PDF和JPEG是此资源的两个表示。所以两者都可以在
下找到/documents/12345
内容谈判
客户如何选择PDF或JPEG?这就是HTTP header 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
。
答案 1 :(得分:1)
怎么样
GET /documents/pdf/12345
和
GET /documents/jpg/12345/1
使用 REST 时,我更喜欢在不使用参数或查询字符串的情况下公开资源。这样它就适合RESTful语法,并且更易于使用ASP.NET MVC中的内置路由进行解析。
就像@Tichodroma所说的关于Http Headers一样,使用REST时使用自定义HTTP头通常不是优选的。看看这里有好的解释: