【问题标题】:Can the Azure Storage REST API send the response in JSON format?Azure 存储 REST API 能否以 JSON 格式发送响应?
【发布时间】:2021-09-11 13:00:28
【问题描述】:

我正在开发一个库,用于处理各种类型的基于云的队列服务。 其中一项服务是 Azure Queue Storage REST API。

对于 Amazon SQS 服务,我可以发送一个 Accept: application/json 标头,响应为 JSON 格式。

由于 JSON 是一种受许多 API 支持的格式,并且使用 XML 并不有趣,我希望 Azure 存储 REST API 也以 JSON 格式返回响应。

我尝试将Accept: application/json 标头设置为无济于事。回复都是带有Content-Type: application/xml的XML格式,这显然不是我想要的。

目前所有代码都在 C 中,依赖于几个库,包括 cURL 和 jansson,尽管对于这个问题并不重要。只是我希望库尽可能简单轻量。

我很难翻阅各种文档。我能找到的大多数主题都是关于在消息中发送 JSON。但这不是我想要的。

甚至可以接收 JSON 格式的实际响应吗?我真的很想放弃我的 libxml2 依赖项。

【问题讨论】:

  • 我没有答案,但 but apparently true 队列 API 支持 XML 而不是 JSON 真的很令人惊讶。这可能与队列是可追溯到平台早期的最古老的 Azure 功能之一有关。仍然出乎意料的是,现在有很多可用的 API 还没有更新。很奇怪。
  • 您可能更喜欢 Azure 服务总线队列而不是 Azure 存储队列。
  • 感谢您的建议。事实上,我也想实现它,以及 Google Pub/Sub。但是,这个问题专门针对 Azure 存储 REST API。

标签: json azure rest azure-storage-queues


【解决方案1】:

正如@Tom 所指出的那样,因为文档说明它只返回 XML,所以我会亲自编写一个 azure 函数,它成为一个适配器,基本上接受您的请求,将其发送到 azure 队列存储,检索 xml 响应,然后将 xml 响应转换为 json 并将 json 返回给调用者(这将是您的 C 代码)。

下面是一个将xml转换为json的示例python代码:

import xmltodict
import json

text = ''

xpars = xmltodict.parse(text)
json = json.dumps(xpars)
print(json)

一个示例 xml 消息

text = '<QueueMessagesList>  
    <QueueMessage>  
      <MessageId>string-message-id</MessageId>  
      <InsertionTime>insertion-time</InsertionTime>  
      <ExpirationTime>expiration-time</ExpirationTime>  
      <PopReceipt>opaque-string-receipt-data</PopReceipt>  
      <TimeNextVisible>time-next-visible</TimeNextVisible>  
      <DequeueCount>integer</DequeueCount>  
      <MessageText>message-body</MessageText>  
    </QueueMessage>  
</QueueMessagesList>'

响应将是:

{
  "QueueMessagesList": {
    "QueueMessage": {
      "MessageId": "string-message-id",
      "InsertionTime": "insertion-time",
      "ExpirationTime": "expiration-time",
      "PopReceipt": "opaque-string-receipt-data",
      "TimeNextVisible": "time-next-visible",
      "DequeueCount": "integer",
      "MessageText": "message-body"
    }
  }
}

请注意:这整个过程也可以使用 azure 中的逻辑应用程序来完成。
我在这里只展示了 XML 到 JSON 的转换器部分,但是编写一个 HTTP 触发器 Azure 函数来做同样的事情真的很简单。或者您甚至可以将此转换器写入您的 C 代码中。

希望这有助于您继续开发库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2017-12-15
    • 2014-09-11
    • 2018-12-11
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多