REST API - 包含元数据的文件 - 如何提交它们

时间:2014-08-14 11:34:24

标签: api rest

假设我正在创建一个服务来管理带有元数据的文件。正如SO another thread中已经讨论的那样,首选的方法是创建两个资源:

  1. 文件(即GET / files / {fileId}) - 二进制文件
  2. 元数据(即GET / files / {fileId} / metadata) - 关联的元数据。
  3. 问题是 - 允许客户上传包含元数据的文件的最佳方式是什么?以下方法如何:

    1. POST / files - 客户端上传二进制文件,该服务创建一个新的文件资源和相应的新的,空的(即默认值),元数据资源并返回文件资源的ID(即fileId)

    2. PUT / files / {fileId} / metadata - 客户端设置元数据。

    3. 我认为这种方法有一个缺点 - 让我们说一些元数据是强制性的。使用此流程,客户端可能仅上载文件但不填写元数据,从而使数据处于不一致状态。

      另一方面,允许客户端同时发送文件和元数据似乎很奇怪,因为它是两种不同的资源。

      你会怎么处理这个?

1 个答案:

答案 0 :(得分:1)

  

另一方面,允许客户端同时发送文件和   元数据同时显得很奇怪,因为它有两个不同   资源。

内容和元数据可能表示为服务器中的不同资源,但它们彼此密切相关,创建一个没有另一个是没有意义的。例如,可能有客户端只需要元数据,因此他们可以显示文件列表或单个文件的详细信息。另一方面,您需要元数据,以便客户端至少知道他们下载的文件的名称。所以你需要它们。

这就是为什么在单个multipart http请求中上传文件/内容和元数据的最佳原因。在单个请求中上传所有内容会使您的系统更加一致,因为它消除了上载内容但元数据不是(或反过来)的各种情况。

多部分请求基本上是一个具有元数据(作为字符串)和其主体内容的请求。唯一困难的部分是标题。请查看上面的链接,了解有关多部分请求的更多信息,此外,您可能希望找到一个类(或类系列)来处理多部分标题(取决于您的平台/语言)。

此外 - 将元数据和内容作为不同的资源对客户端有益 - 他们可能只下载两个中的一个,在大文件的情况下节省网络流量(时间)。