代码之家  ›  专栏  ›  技术社区  ›  jlanza

用于检索数据块的Web服务

  •  2
  • jlanza  · 技术社区  · 16 年前

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

    该服务将一些数据从服务器下载到本地计算机上的设备。数据将被分割成块。该服务将在本地计算机上使用一个特别的客户机运行,该客户机将管理要存储文件的设备。

    我在想做些什么,比如:

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

    问题在于行动。在REST中,只定义GET、POST和(PUT DELETE)。但我想下载一些类似的东西。我的想法是,尽管不能完全休息,但要创造:
    /文件/id/下载 这将返回类似

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

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

    你怎么认为?这样做可以吗?还是使用SOAP和定义诸如getfiles()、getfilechunk(chunkon,file)等函数的传统方法更好?

    任何评论都非常感谢。

    再见

    3 回复  |  直到 16 年前
        1
  •  0
  •   Daff    16 年前

    正如John已经提到的,您可能希望在文件资源和文件资源元数据(有关文件的任何信息)之间进行分离。此外,访问块的更为安静的方法可能如下所示:

    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)。

        2
  •  3
  •   Kevin    16 年前

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

    RFC 对于HTTP头字段

        3
  •  0
  •   John Feminella    16 年前

    听起来你有两种不同的资源: file-metadata S和 file S.比如:

    /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.