我打算开发一个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)等函数的传统方式会更好吗?任何评论都非常感谢。
见到你
答案 0 :(得分:3)
如果使用REST,则不需要定义自己的“分块”协议,因为HTTP头内容长度,内容范围和传输编码都用于发送分块数据。
有关HTTP标头字段的信息,请参阅RFC
答案 1 :(得分:0)
听起来你真的有两种不同的资源:file-metadata
和file
。怎么样:
/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)。