RESTful设计 - 如何为实体的附件建模

Lio*_*orH 6 rest binary binaryfiles attachment

我试图在REST中模拟实体的附件.假设缺陷实体可以附加多个附件.每个附件都有一个描述和一些其他属性(最后修改,文件大小......).附件本身是任何格式的文件(jpeg,doc ...)

我想知道我应该如何对REST进行建模

我想到了以下两个选项:

第一种方法(使用相同的资源,不同的表示):

  • GET,content-type:http:// my-app/defects / {id}/attachments上的XML将以XML格式返回缺陷的附件元数据(描述,最后修改,文件大小......)

  • GET,内容类型:http:// my-app/defects / {id}/attachments上的gzip 将在zip文件中返回缺陷的附件

  • GET,content-type:mime multi-part on http:// my-app/defects / {id}/attachments将返回多部分消息中的缺陷附件(二进制数据和XML元数据)

  • POST,content-type:http:// my-app/defects / {id}/attachments上的XML 将创建新附件,元数据只附加文件(然后用户必须发送带有二进制数据的PUT请求)

  • POST,content-type:mime\multi-part on http:// my-app/defects / {id}/attachments将创建附件,客户端可以在单个往返中发送元数据和文件本身

第二种方法(将附件的数据与元数据分开):

  • GET,content-type:http:// my-app/defects / {id}/attachments上的XML将以XML格式返回缺陷的附件元数据(描述,最后修改,文件大小......)

  • GET,内容类型:http:// my-app/defects / {id}/attachments/files上的gzip 将在单个zip中返回缺陷的附件二进制数据

创建新附件,首先调用:

  • POST,content-type:http:// my-app/defects / {id}/attachments上的XML 将创建新附件,元数据只附加文件(然后用户必须发送带有二进制数据的PUT请求)

然后添加二进制数据本身:


一方面,第一种方法更加健壮和高效,因为客户端可以在单次往返中创建\获取附件元数据和二进制数据.另一方面,我有点不愿意使用mime-multipart表示,因为它消耗和生产更麻烦.

编辑:我检查了闪烁上传REST API.他们似乎正在使用多部分消息来包含照片和照片属性.

S.L*_*ott 2

不要单独管理元数据。两部分的行动违背了休息的意义。

通常的做法是使用一个相对复杂的负载进行一种平滑的 GET/POST/PUT/DELETE 操作。

事实上,它是“表”中的多个底层“对象”,这一事实与 REST 无关。

在 REST 级别,它只是通过一条消息传输一个复杂对象的状态。