Json 使用RESTAPI删除本地/客户端对象的常用方法是什么?

Json 使用RESTAPI删除本地/客户端对象的常用方法是什么?,json,web-services,api,rest,restful-architecture,Json,Web Services,Api,Rest,Restful Architecture,是否存在将删除的对象分派给请求者(API的客户端)的通用设计模式 我们面临的挑战: 当API上的对象被完全删除时,客户端将不知道 该对象已消失并将保留在本地(因为API仅显示在特定日期后更改的对象) 如果我们使对象的属性显示已删除(例如“deleted=TRUE”),则 最终,API中的对象数量会增加,并降低传输速率 我们研究的另一个选项是在API上有单独的端点,以仅显示已删除对象的列表(这是任何人都使用的模式吗?) 我正在寻找最“RESTful方式”来删除本地对象。过时的数据始终是客户机/服务

是否存在将删除的对象分派给请求者(API的客户端)的通用设计模式

我们面临的挑战:

  • 当API上的对象被完全删除时,客户端将不知道 该对象已消失并将保留在本地(因为API仅显示在特定日期后更改的对象)
  • 如果我们使对象的属性显示已删除(例如“deleted=TRUE”),则 最终,API中的对象数量会增加,并降低传输速率
  • 我们研究的另一个选项是在API上有单独的端点,以仅显示已删除对象的列表(这是任何人都使用的模式吗?)


    我正在寻找最“RESTful方式”来删除本地对象。

    过时的数据始终是客户机/服务器应用程序的问题。如果客户端加载一些数据,然后服务器上的一些对象被删除,然后客户端发送一个删除请求,RESTFul要做的事情就是返回一个404,它指示“未找到”。如果客户端知道如果它发送了一个DELETE,并得到了一个404,那么资源是从下面删除的…

    我处理它的方式是在您的#1上的一个变体:每个项目在数据库中都有一个
    上次更新的
    字段,如果某个项目被删除,我会在另一个删除项目表中创建一个条目,它的更新值是当它被删除时


    客户机发出请求,请求“自X以来的更改”,这是他们自己本地存储的上次更新的
    值…它返回新数据和已删除项目的数组。然后在客户机上,我清除这些值

    如果您认为您的资源不是一个列表,而是一个变更集呢

    更改git或SVN中的内容

    这样,总是有一个“头”版本,客户端总是有一些版本,资源是客户端的最后一个版本和头之间的更改

    这样,您就可以应用通过检查/使用版本控制系统所学到的知识


    如果您需要更复杂的东西,背后的科学称为操作转换(OT)-

    请您解释一下:为什么客户端会发送“删除”请求?客户端不知道需要删除该对象。。。或者你的意思是,如果客户端没有收到对象,它应该发出“删除”请求?我正在寻找解决这个问题的最RESTful的方法,所以你的答案很有意思。我说的是,如果客户端加载了数据,因此它看到了一个资源,然后不知怎么地,该资源在服务器上被删除了,而不知道情况,然后客户端尝试删除……我检查了我的API,它显示“HTTP/1.0 410消失了”对于已删除的对象,我认为与您所说的类似,因此这很有帮助。现在,当我使用列表端点而不仅仅是单个对象时,是否还有确定已删除对象的方法?*我也在考虑这个选项,但如果从头开始实现,它似乎相当复杂,我希望有更多的“RESTful方式”要做到这一点,您是将已删除对象的数组保留在同一个端点中,还是有单独的端点?对于删除的对象,您是保留整个对象还是删除的对象只是primarykey+LastUpdate?同一个端点,它只返回如下内容:
    {“delta”:[{“id”:1,“price”:15},{“id”:3,“price”:14}],“deleted”:[{“id”:2}]}
    ,然后在客户端上,它通过delta数组循环,执行
    插入或更新
    行为,然后在已删除的数组中循环,从本地数据库中删除这些条目(我通常在iOS设备上使用SQLite)。由于删除的目标是消除,我看不到存储超过主键的值,但可能有一些实现是有价值的哦,这不是一个真正的响应,在增量条目中,我也会让每个条目最后更新值。。。