返回图像和数字的Web服务

时间:2011-01-10 19:00:34

标签: web-services

如果我有一个返回图像的web服务,是否有一种标准方法可以让它返回一些结构化数据(在最简单的情况下,是一个额外的字符串或数字)?

有关返回图像的Web服务的PHP示例,请参阅this question。 (但我现在的问题并不是特定于PHP。)

可能的解决方案(大多数不是很令人满意):

  1. 将额外数据放入图像的元数据中。
  2. 将额外数据放入HTTP标头中。
  3. 让webservice返回一个nonce URL,从中可以在有限的时间内获取图像。
  4. Base64对图像进行编码,并在JSON或XML数据结构中创建巨大的字符串字段。 (感谢CarlesTiago。)
  5. 你会怎么做?

    (我真的不想将webservice分成两个单独的调用,因为webservice占用了大量的参数,将它们全部发送两次似乎很浪费。)

4 个答案:

答案 0 :(得分:2)

返回以base64编码的图像二进制数据和附加字段:

{ image: "mIIerhdkwje...", data: "data" }

Base64编码为您提供33%的开销(每3个原始字节需要4个字节)。根据数据的大小,最好用二进制数据的url替换它并发出第二个请求......

答案 1 :(得分:2)

HTTP标头是可行的选择,因为它们可以在服务器端和客户端轻松解析。您可以做的另一件事是设置302,将其重定向到URL中的图像和数据(例如 - >

  1. 点击http://mysite.com/bestimageever.png
  2. 获得302到http://mysite.com/realbestimage.png?supercoolinfo=42
  3. 这对用户是透明的,大多数API客户端都可以工作(因为它们处理重定向)

答案 2 :(得分:1)

协议缓冲区是另一种选择。协议缓冲区不是自描述的,如XML或JSON,但它们在线上更加紧凑。 Google图书馆(http://code.google.com/p/protobuf)提供了C ++,Java和Python库,而贡献者也为许多其他语言提供了图书馆(http://code.google.com/p / protobuf / wiki / ThirdPartyAddOns),包括Javascript和PHP,因此客户编写者应该可以轻松使用该格式。

答案 3 :(得分:0)

是不是可以在返回的json / xml中包含二进制数据来形成图像?通过这种方式,您可以根据需要添加任意数量的字段,并且可以在客户端中处理此信息。