在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的预期结果...
在这种情况下,推荐的方法可能是什么?