如何在JSON-API响应中表示多个图像大小?

时间:2018-07-30 13:15:28

标签: json-api

我的应用有用户,每个用户都有一张照片,可以下载多种尺寸。您将如何在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模板

我可以返回一个模板和可用的尺寸,而不是为每个照片尺寸返回一个URL,但是afaik这不是JSON-API中的/ allowed(?)的一部分(还可以吗?)。

1 个答案:

答案 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参数使客户端仅请求特定的照片尺寸。