假设我正在设计REST API,并且我需要客户端能够获取包含元数据的文件。什么是设计资源/操作的好方法?
有些想法浮现在脑海中:
单个资源(即GET / files / {fileId}),它返回包含文件和带元数据的JSON / XML结构的多部分响应。我有一个觉得这不是一个很好的方法。例如,您不能使用客户端的Accept标头来确定他们是否需要XML或JSON元数据表示,因为响应类型在两种情况下都是多部分的。
两个资源(即GET / files / {fileId}和GET / files / {fileId} / metadata),其中第一个返回文件本身,第二个是JSON / XML结构元数据。可以存在从元数据到文件的链接。但是,如何将文件链接与文件一起发送?
答案 0 :(得分:4)
我建议使用你提出的第二个想法。这是大多数主要网络驱动器(Box,Dropbox,Google Drive等)使用的策略。它们通常具有明显不同的URL,因为它们将内容和元数据存储在不同的位置。
您可以使用指向元数据的链接向文件响应添加链接标头。链接标头在RFC 5988中描述。当前注册的链接关系集合为here。关闭袖口,似乎describedBy
关系在这里是合适的。
答案 1 :(得分:3)
我使用以下API设计取得了成功。这与您建议的略有不同,主要资源只包含指向其组件的链接。
POST /file
Request
<bytes of file>
Response
Location: /file/17
{
"id": 17
}
GET /file/17
{
"data": "/file/data/17",
"metadata": "/file/metadata/17"
}
GET /file/data/17
<bytes of file>
GET /file/metadata/17
{
"type": "image",
"format": "png"
}
DELETE /file/17
答案 2 :(得分:0)
您的第一个选项根本不是一个好选择,因为它违反了以下REST约束。
通过这些表示来处理资源 统一接口原则。
当客户持有资源的表示时,包括任何资源 元数据附加,它有足够的信息来修改或删除资源。
如果你刹车的话。您的网址不会被视为RESTful。
Wiki关于它。