Я только начал использовать Eve, и это действительно здорово для быстрого запуска полного REST API. Однако я не совсем уверен, что REST идеален во всех случаях, например. Я хотел бы иметь простой маршрут для голосования, где я могу увеличить счетчик объекта. Если я вручную извлекаю объект, увеличиваю значение счетчика и обновляю его, я легко могу столкнуться с проблемами рассинхронизации. Поэтому я хотел бы добавить простой дополнительный маршрут, например. /resource/upvote, который увеличивает количество голосов на единицу и возвращает объект.
Я не знаю, насколько это «хакерство», поэтому, если это чрезмерно, скажите мне. Я не вижу проблемы с наличием пользовательских маршрутов для некоторых важных задач, которые требуют слишком много работы для RESTful-способа. Я знаю, что могу рассматривать голоса как отдельный ресурс, но, эй, я думал, что мы делаем 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? (Я использую собственный ObjectId MongoDB) - Проблема №2 Как сохранить объект? Я не вижу удобного и простого в использовании метода, такого как
save_raw
- Проблема №3. Можем ли мы обернуть все это в транзакцию или что-то подобное, чтобы убедиться, что это потокобезопасно? (Я также новичок в MongoDB, как вы можете сказать).