【发布时间】:2015-06-26 09:09:57
【问题描述】:
我刚开始使用 Eve,它非常适合快速运行完整的 REST API。但是,我并不完全相信 REST 在所有情况下都是完美的,例如我想要一个简单的投票路线,我可以增加对象的计数器。如果我手动检索对象、增加计数器并更新它,我很容易遇到不同步的问题。所以我想添加一个简单的额外路线,例如/resource/upvote 将 upvote 计数加一并返回对象。
我不知道这有多“骇人听闻”,所以如果它过于夸张,请告诉我。我认为为某些重要任务使用自定义路由没有问题,这些任务以 RESTful 方式完成的工作量太大。我知道我可以将 upvotes 视为它自己的资源,但嘿,我以为我们在做 MongoDB,所以我们不要过于相关。
所以这是我得到的:
@app.route('/api/upvote/<type>/<id>')
def upvote(type, id):
obj = app.data.find_one_raw(type, id)
obj['score'] += 1
-
问题 #1
find_one_raw始终返回 None。我想我必须转换 id 参数? (我使用的是原生 MongoDB ObjectId) -
问题2如何保存对象?我没有看到像
save_raw这样方便易用的方法 - 问题 #3 我们能否将整个事物封装在事务或类似事物中以确保它是线程安全的? (如您所知,我也是 MongoDB 新手)。
【问题讨论】:
-
我不确定如何进行自定义路由,但 Eve 确实内置了数据完整性和并发控制。 python-eve.org/… 所以你会在尝试更新(PATCH)已经更新的资源时失败。
标签: python mongodb rest flask eve