web-services - 设计用于媒体转换的 REST 服务

标签 web-services rest mime-types

我目前的任务是设计一个 REST 服务,该服务可用于从一种媒体类型转换为另一种媒体类型(例如,从 video/x-msvieo 到 video/x-flv)。它不应该是可用的 vie 浏览器。
通常,我会让客户端 POST 媒体文件并返回一些 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.) POST 媒体文件到 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看看目前发生了什么。

所以,非常感谢您阅读所有这些内容:)
你觉得我的做法怎么样?你将做点什么不同的?
我对这个东西很陌生,所以任何建议都非常感谢。

亲切的问候:比尔

最佳答案

在第 4 步中,我会考虑使用 300 响应代码。您正在做与客户端驱动的内容协商非常相似的事情。在这里查看它是如何完成的 http://www.w3.org/TR/wd-xptr

您创建一个“作业”资源来表示新媒体文件的创建的想法是处理 RESTful 系统中长时间运行的操作的完全有效且非常常见的方法。

唯一的其他评论是,在第 5 步中,我最初担心使用 GET 来做到这一点,但经过仔细考虑后,这似乎是合理的。这很好,因为最终转换后的视频可以在同一 URL 上访问。然后,客户端所要做的就是意识到如果他们请求视频并得到 202,他们只需要稍等片刻即可重试。如果他们愿意,他们可以检查 ./status 资源以了解它是否完成。我想你只需要确定你是否已经在转换你返回另一个 202 但不要开始一个新的转换过程:-)

关于web-services - 设计用于媒体转换的 REST 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432694/

相关文章:

java - .Net 服务不可用时如何在 java 中测试 .net webservice

java - 如何动态创建与 wicket 的静态链接?

java - 如何让Android使用spring监听来自服务器的请求

php - Mime 类型 PDF php 上传

java - 使用 Web 服务获取 cookie 值中的用户名和密码

java - 将 CFML 参数转换为用于 Web 服务调用的 Java 类时出错

rest - 结合使用JSON和Grails来使用REST API

python - 如何从类文件对象中使用 python mimetypes.guess_type

java - 使用 String[] args 参数作为 .setQ 参数中的变量 (Google Drive API V3)

可用服务的 Python zeep 概述