通知 Api 系统正确处理

Notification Api System Correct Process

我构建了一个小型通知 api 系统,其中包含 iduser_idsubjecttextstatuscreated_at 数据库中的列。

我目前的流程是,当用户请求她的通知时,我会获取最近的 100 条 未读 消息并发送给用户,然后等待前端发送给我用户已阅读的 ids 列表,以便我可以将它们的状态更改为 read.

但有时这不会发生,这意味着当用户请求另一组消息时,他们将取回他们已读过的消息。

所以我考虑在为用户检索消息后将其标记为已读,而不是等待来自前端的更新。

但我不确定这是否是处理此问题的最佳方式! api 通知系统有没有更好的流程请指教。谢谢。

我们在这里看不到您的代码,但我建议如下:

  1. 将显示给用户的消息的 ID 存储在前端的数组中,因此当用户查看消息时,您将 id 添加到该数组。我不确定您的前端使用的是什么,因此无法真正提出代码建议。

  2. 在路由文件的后端创建一个接收此数组的端点

    Route::post('somepath/read-messages', 'MessageController@readMessages');
    

    然后,在您的消息控制器中:

    public function readMessages(Request $request) {
    
       if ($request->has('read_messages') {
           $messages = Message::whereIn('id', $request->read_messages)->get();
           $messages->update(array('staus' => 'read');
       }
    
    }
    

我会这样想:那个未读条目列表描述的是什么?国家了解的内容未被阅读。提取未读项目列表真的意味着所有这些项目都已阅读吗?我想不是。您可能允许批量标记读取,但实际上读取列表只是一种状态表示。阅读列表,并通过向 thing/mark-read.

发送每项请求,在触摸到可见界面组件时权威地标记为已读

如果您认为(中央)存储不能准确表示状态,因为您认为它们应该被读取,请调试您的界面。不过,我不会在拉出列表时标记为已读。那将是一个有缺陷的方法。

如果您直接将所有 100 个项目插入到您认为已读取的显示中,请在 api 中为 thing/mark-items-read 创建一个端点并将这 100 个项目 ID 传递给它。