繁体   English   中英

REST API-带有元数据的文件-如何提交

[英]REST API - files with metadata - how to submit them

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

  1. 文件(即GET / files / {fileId})-二进制文件,
  2. 元数据(即GET / files / {fileId} / metadata)-关联的元数据。

问题是-允许客户端上传带有元数据的文件的最佳方法是什么? 如何使用以下方法:

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

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

我发现这种方法有一个缺点-假设某些元数据是强制性的。 通过这种流程,客户端可能仅上传文件,而没有填写元数据,从而使数据处于不一致状态。

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

您将如何处理?

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

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

这就是为什么最好在单个多部分 http请求中上载文件/内容和元数据。 在单个请求中上载所有内容使您的系统更加一致,因为它消除了上载内容但元数据未上载(或相反)的各种情况。

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

另外-将元数据和内容作为不同的资源对客户端来说是有益的-它们可能仅下载两者之一,如果文件很大,则可以节省网络流量(时间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM