Php 通知Api系统正确的进程

Php 通知Api系统正确的进程,php,laravel,api-design,php-7.4,Php,Laravel,Api Design,Php 7.4,我构建了一个小型通知api系统,该系统具有id,用户id,主题,文本,状态,在数据库中的列中创建 我当前的流程是,当用户请求她的通知时,我会收到最近100条未读的消息并发送给用户,然后等待前端向我发送用户已读的id列表,以便我可以将其状态更改为已读 但有时这种情况不会发生,这意味着当用户请求另一组消息时,他们将返回已阅读的消息 因此,我考虑在为用户检索消息后将其标记为已读,而不是等待前端的更新 但我不确定这是否是最好的处理方法!是否有更好的api通知系统流程请告知我。谢谢。我们在这里看不到您的代

我构建了一个小型通知api系统,该系统具有
id
用户id
主题
文本
状态
在数据库中的
列中创建

我当前的流程是,当用户请求她的通知时,我会收到最近100条未读的消息并发送给用户,然后等待前端向我发送用户已读的
id
列表,以便我可以将其状态更改为已读

但有时这种情况不会发生,这意味着当用户请求另一组消息时,他们将返回已阅读的消息

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


但我不确定这是否是最好的处理方法!是否有更好的api通知系统流程请告知我。谢谢。

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

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

  • 在路由文件的后端创建接收此阵列的端点

    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
    发送每项请求,在被可见界面组件触碰时授权标记Read

    如果(中央)存储区由于认为应该读取状态而无法准确表示状态,则调试接口。不过,我不会在拉名单的时候给里德打分。这将是一种有缺陷的方法


    如果你直接把所有的100插入到你认为读取的显示器中,在你的API中创建一个端点,用于<代码> Toe/Mark条目读取< /代码>,并传递这100个项目ID。

    即使我的问题如此不重要,你知道这个解决方案,请跟你的下一个VoTeS一起说,这可能是你的代码中的一个竞争条件。如果客户端没有将ID列表发送回服务器,那么在他的下一次查询中,她将收到相同的消息。@px1mp是的,这就是我目前正在发生的事情,但前端上的已读消息现在再次显示为未读消息Hank you@Cornel Verster我猜是由于缺少代码,我被否决了,但我的问题不是代码问题只是如何做的问题。我想知道是否最好等待并接收有关已读消息的更新,或者在我将其发送到客户端后将其标记为已读?就这些。另外,前端是react native谢谢你的回答,非常感谢。一些建议:一般来说,在堆栈溢出上问代码相关的问题比问开放式的问题更好,比如“什么是更好的方法…”,但我已经犯了很多次这个错误。我会记住的,但像我这样的问题,我在哪里可以得到答案或建议呢?这不像是一本关于通知的书?