web-services - 如何使用REST Web服务上载包含元数据的文件?

我有一个当前公开此URL的REST Web服务:
http://server/data/media
其中用户可以POST以下JSON:

{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873
}

以便创建新的媒体元数据。
现在,我需要能够同时上传一个文件作为媒体元数据。最好的方法是什么?我可以引入一个名为file的新属性,base64对文件进行编码,但我想知道是否有更好的方法。
还有使用multipart/form-data的方法,就像HTML表单发送的那样,但我使用的是RESTWeb服务,如果可能的话,我希望坚持使用JSON。


最佳答案:

我同意格雷格的观点,一个两阶段的方法是一个合理的解决方案,但是我会反过来做。我会这样做:

POST http://server/data/media
body:
{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873
}

要创建元数据条目并返回如下响应:
201 Created
Location: http://server/data/media/21323
{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873,
    "ContentUrl": "http://server/data/media/21323/content"
}

然后,客户机可以使用这个ContentURL并对文件数据执行Put。
这种方法的好处在于,当您的服务器开始承受大量数据的压力时,您返回的URL可以指向具有更多空间/容量的其他服务器。或者,如果带宽有问题,您可以实现某种循环方法。

评论