如何在REST API中返回图像的替代表示?

时间:2014-11-12 22:40:56

标签: api rest

考虑人为的情景。我有一个资源foo。当用户请求表示foo资源时,我返回所述资源的JSON表示:

GET: /foo/1
Accept: application/json

Response: { 'id' : 'foo1', 'dateCreated' : '11-12-2014', ... other metadata ... }

此外,我可以使用foo类型Acceptimage/png资源请求获取所述资源的图像代表:

GET: /foo/1
Accept: image/png

Response: image data

这里发生的是服务器端图像库正在读取构建图像所需的数据并将其作为响应返回。

这是我的问题所在......我需要将用于构建服务器端映像的数据返回给客户端。例如,让我们考虑D3.js存在于服务器端,并且我正在构建一些正在被提供给D3的JSON:

d3.json('/path/to/my/json', function() { ... });

它呈现静态图像(例如饼图)并返回。我想要返回的是用于从D3构建该图像的数据,因此如果客户端想要在客户端将这个JSON插入到他们自己的D3实例中,他们就可以这样做。

例如,让我们考虑使用以下JSON来创建代表foo的饼图:

[
  { 
    "label": "One",
    "value" : 29.765957771107
  } , 
  { 
    "label": "Two",
    "value" : 0
  } , 
  { 
    "label": "Three",
    "value" : 32.807804682612
  } , 
  { 
    "label": "Four",
    "value" : 196.45946739256
  } , 
  { 
    "label": "Five",
    "value" : 0.19434030906893
  }
]

将此JSON提供给服务器上的图像库,以生成在Accept: image/png的情况下返回的静态图像。除了代表foo元数据的JSON之外,我正在尝试将此JSON返回给客户端。

但是,这会发生冲突,因为如果 JSON,则会返回此类型。因此,由于我们上面已经说过,所以在这里不可能有application/json的Accept标头。

公平地说这也是foo/1资源的替代表示吗?我应该要求使用自定义图片类型(例如Accept: image/x-foo+json)还是自定义应用类型(例如application/x-foo+json)?或者,我是否认为这一切都错了?

0 个答案:

没有答案