在处理我的REST api时,我想知道什么是最佳实践,当你需要处理某些动作时,让我用一个例子来解释。
说我有以下型号。
create_table "requests", force: :cascade do |t|
t.datetime "start_date"
t.float "price"
t.string "status", default: 'open'
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
然后我将为该模型提供通常的CRUD路径/操作(显示,创建,更新,销毁)。
好吧,说我想将给定请求记录的状态更改为“已接受”,我会将更新的属性发送到更新路径,并且wola。
但是,如果我想对某些状态更新作出反应,我可能希望在请求更新时向相关用户发送邮件。
我可以为该行为创建一个完整的新操作。
/api/v1/request/:id/approve
然后我可以发送邮件并在我的操作中更新请求的状态。
但是我不禁觉得我应该使用更新功能,因为我真正在做的只是更新请求状态,邮件更像是一种“副作用”。
然后我看了How to detect attribute changes from model?而不是让我将功能传递给模型,如果状态在保存之前发生了变化,则发送邮件。 然而,这将导致很多之前的行动,我也没有特别漂亮。
你推荐什么?
答案 0 :(得分:0)
您建议的方法在不同的情况下都可以正常工作:
如果您的更改不是那么重要,如果用户在一段时间后收到通知就可以了,那么您可以
I)您可以按照建议进行更新通话
II)您可以将邮件功能添加到队列中,sperate阅读器将从队列中读取并相应地向用户发送邮件(如果您拥有大量用户,这将是有利的)
答案 1 :(得分:0)
你可以做什么(我相信什么是有效的REST方式):
RequestApproveController
左右的新控制器。create
Request
的{{1}}模型上创建方法(在那里更新属性并发送电子邮件)approve
/api/v1/request/:id/approve
路线