在GET调用python Eve API时,将默认(XML和/或JSON)HTML响应头字段'Content-Type'覆盖到JSON-LD的“application / ld json”的推荐方法是什么?

这里的意图是:

  • 使用基于自定义提供的Eve模式的过滤器检索存储在mongodb集合中的文档,

  • 使用event-hook“on_fetched_resource”将json-ld上下文附加到“@context”字典字段和“@graph”字段下的文档列表中,然后返回响应,

  • 在返回响应之前,还要将HTML Headers “Content-type”更改为JSON-LD .

从Eve docs开始,本地处理的“内容类型”似乎相当硬编码 .

我调查了mimerender的使用,从flask-mimerenderer提示,尝试将 override via a decorator 添加到app.on_fetched_resource的自定义函数 - 它处理对"response"字典(包含字段"_items"等)的更改以使其成为JSON-LD - 以便尝试和 get the response to sport the "application/ld+json" tag .

from eve import Eve

    app = Eve(settings=mongo_settings)

    def before_returning_items(resource_name, response):

        # Process response dict to make contents json-ld compliant.
        # In particular add "@context" key/value pair, and
        # store documents retrieved in "_items" to "@graph" instead.

        return response


    app.on_fetched_resource += before_returning_items

    if __name__ == '__main__':
        app.run()

但是,我没有找到确切的方法将Flask,Eve和mimerender的不同部分放在一起,以获取带有header {'content-type':'application / ld json'}的requests.get调用的ld json标签 . .

我设法获得的最佳结果是通过编辑Eve render.py来添加条目:

{'mime': ('application/ld+json',), 'renderer': 'render_json', 'tag': 'JSON-LD'}

到_MIME_TYPES列表 .

然而,理想情况下,我显然宁愿通过更改设置或使用mimerender等附加模块而不是调整库/模块代码来获得额外响应mimetype的预期结果...

在这种情况下,推荐的方法可能是什么?