我的应用有用户,每个用户都有一张照片,可以下载多种尺寸。您将如何在JSON-API中对此建模?
data: {
photo: {
small: "small.png",
large: "large.png"
}
}
我在这里看到的问题是,当有6种图像尺寸和50个用户的列表时,我通过网络发送了300个照片URL,而其中大多数则不需要。
data: {
photo: "default.png"
}
这会产生较少的数据,但尚不清楚如何获得大/小版本。可以通过添加一个请求参数?photo_size=small
来完成,然后返回一个不同的照片URL。这里的问题:您必须了解photo_size参数。从响应中还不清楚它是否存在。
{
links: {
small_photo: "url to photo or url to user endpoint but with photo_size param (see above)"
}
}
这感觉像json-api
,但同样会产生很多json数据。我也不确定要链接的内容(照片或用户端点)。
我可以返回一个模板和可用的尺寸,而不是为每个照片尺寸返回一个URL,但是afaik这不是JSON-API中的/ allowed(?)的一部分(还可以吗?)。
答案 0 :(得分:2)
如果您将图像视为用户的属性,那么我不认为JSON-API规定了如何处理与外部文件的链接。您的任何技术都符合规范。
您的第一个数据结构将是最简单的,并且鉴于图像URL主要由重复部分组成,它们可以很好地压缩,因此每个图像变化的额外下载大小可能会忽略不计。
以下是相当标准的:
data: {
type: "user",
id: 1,
attributes: {
photos: {
small: {
url: "https://...",
width: 50,
height: 50
},
large: {
url: "https://..."
...
使用模板似乎也符合要求,因为这完全取决于客户端来决定如何处理数据:
data: {
type: "user",
id: 1,
attributes: {
photos: {
base: "https://...<size>.jpg",
sizes: ["small", "medium", "large"]
...
尽管规范非常松散地定义了链接,但看起来似乎不合适,因为期望链接到其他API资源。
由于您陈述的原因,内联也不是很好,您不想在客户端上假设该知识。
您还可以使用fields
参数使客户端仅请求特定的照片尺寸。