【发布时间】:2011-07-22 21:45:47
【问题描述】:
我当前的任务是设计一个 REST 服务,该服务可用于从一种媒体类型转换为另一种媒体类型(例如,从 video/x-msvieo 转换为 video/x-flv)。它不应该在浏览器中可用。 一般来说,我会让客户端发布媒体文件并返回一些 URL 以供进一步参考(如http://www.example.com/Media/12345)。
有趣的是——这就是问题出现的地方——转换过程可以用两种不同的方式来解释:
1) 转换后的媒体只是原始媒体的不同表示,因此要请求新格式的媒体,您只需 GET http://example.com/Media/12345,并在 Accept-header 中告诉服务您需要什么格式。例如,由于转换了大视频,该服务将响应 202 Accepted 直到转换完成。但是,如果转换因任何原因失败,会发生什么?
2) 由于转换需要很长时间,因此可以将进程表示为它自己的资源。在这种情况下,必须将某种形式的工作描述(可能是 xml)发布到 http://example.com/Media/12345,并且该服务将响应请求转换的新 URI(如 http://example.com/Media/12345/jobs/1)。但是这样的设计不会是完全非 REST-linke 的吗?
我目前拥有的是这样的:
1.) 将媒体文件发布到http://example.com/Media
2.) 响应:201 创建/位置:http://example.com/Media/12345
3.) 获取http://example.com/Media/12345
4.) 响应:200 Ok 和这样的 xml:
<media id="123457">
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://example.com/Media/12345/video/x-flv">video/x-flv</link>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://example.com/Media/12345/video/mpeg">video/mpeg</link>
</media>
xml 中的链接将您发送到该媒体可用的转换目标。
5.) 从 xml 中的链接中选择以开始转换/通过 GETting http://example.com/Media/12345/video/mpeg 获取结果
6.) 响应:202 接受/位置:http://example.com/Media/12345/video/mpeg/Status
7.) 重复第 5 步,直到转换完成或查看http://example.com/Media/12345/video/mpeg/Status 以了解当前发生的情况。
所以,非常感谢您阅读所有这些内容 :)
你觉得我的方法怎么样?你会做什么不同的事情?
我对这些东西很陌生,因此非常感谢任何建议。
亲切的问候:比尔
【问题讨论】:
标签: web-services rest mime-types