我正在尝试构建一个由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()