用于检索数据块的Web服务

时间:2010-01-20 20:01:15

标签: java rest web-services

我打算开发一个Web服务,我喜欢尝试RESTful架构。问题是我不知道服务是否适合它,或者最好使用SOAP。

该服务是将一些数据从服务器下载到本地计算机上的设备。数据将拆分为块。该服务将与本地计算机上的ad-hoc客户端一起运行,该客户端将管理将要存储文件的设备。

我正在考虑做类似的事情:

/files/{id} --> will inform about the details of the file  
/files--> list all the files  

问题在于行动。在休息时,仅定义GET,POST和(PUT DELETE)。但我希望有类似下载的东西。我的想法,虽然不是完全宁静,但是要创造:
/文件/ {ID} /下载 这将返回类似

的内容
{ "chunk" : "base64 string with chunk data"  
  "next" : "http://XXX/file/id/download?chunk=1  
}

当next为空时,将下载整个块。

你怎么看?这样做是否可以,或者使用SOAP和定义getFiles(),getFileChunk(chunkNo,file)等函数的传统方式会更好吗?

任何评论都非常感谢。

见到你

3 个答案:

答案 0 :(得分:3)

如果使用REST,则不需要定义自己的“分块”协议,因为HTTP头内容长度,内容范围和传输编码都用于发送分块数据。

有关HTTP标头字段的信息,请参阅RFC

答案 1 :(得分:0)

听起来你真的有两种不同的资源:file-metadatafile。怎么样:

/file/{id}          // GET: Retrieve this file's data.
/file-metadata/{id} // GET: Metadata about a particular file. Contains link to file:
                    // {
                    //    ...
                    //    data: "http://.../file/156",  // Where to find file's data.
                    // }
/file-metadata      // GET: List metadata for all files.

答案 2 :(得分:0)

正如John已经提到的,您可能希望将文件资源和文件资源元数据(有关您的文件的任何信息)分开。此外,访问您的块的更多RESTful方式可能如下所示:

http://url/files/{id}/chunks

{
    "complete" : false,
    "chunks": [
        "http://url/files/<fileid>/chunks/1",
        "http://url/files/<fileid>/chunks/2",
        "http://url/files/<fileid>/chunks/3",
    ]
}

基本上,在这里,您将RESTFUL URI列表返回给所有文件块,如果文件的所有块都已完成,则返回信息。我没有看到SOAP可能在那里有任何优势,因为您将定义REST动词GET已经涵盖的相同方法(getFile和getChunks)。