我正在尝试构建一个由MongoDB支持的Flask应用程序,该应用程序可从相同的端点提供服务:


默认情况下为HTML Web界面
JSON响应(如果Content-Type == application/json


这个想法是,既使用浏览器使用我的应用程序的用户,又以编程方式使用我的API的服务都可以命中http://myapp.com/users/12345,前者提供HTML响应,后者提供JSON响应。

据我了解,这与“纯” REST保持一致,这与从单独路径(如http://myapp.com/api/users/12345)提供API的传统形成了鲜明对比。

Eve文档中没有讨论视图,只是说默认情况下将结果作为JSON并根据要求提供XML。

有什么干净的方法可以覆盖此行为,例如:


如果Content-Type == application/json,则提供标准的Eve JSON响应
否则,视图将模板应用于Eve返回的数据以生成HTML响应吗?


看来这将是创建同时包含RESTful和DRY的应用程序的绝佳方法。

最佳答案

您可以查看Eve-Docs扩展,该扩展在现有的Eve驱动的MongoDB REST Service之上实现了HTML /docs端点。

请记住,Eve是一个Flask应用程序(实际上是一个子类),因此您可以使用Flask进行的所有操作也可以使用Eve进行处理(例如装饰渲染功能等)。

更新:这是一个小示例代码片段,它向Eve驱动的API(source)添加了自定义/hello端点。如您所见,它与标准Flask端点几乎相同:

from eve import Eve
app = Eve()

@app.route('/hello')
def hello_world():
    return 'Hello World!'

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

10-06 05:15