我正在构建具有以下端点的REST API:
GET /api/v1/categories - Get all categories
DELETE /api/v1/categories/$id - Delete a specific category
移动应用程序应首次获取所有类别,但之后应仅获取最后修改的类别(使用Last-Modified HTTP标头)。
当第二个应用程序删除类别时,服务器将其从数据库中删除。删除后,如果其他应用请求了最后修改的类别,则服务器不会返回有关已删除类别的任何信息,并且这些应用不会将其从其本地数据库中删除。
此问题的最佳解决方案是什么?
我正在考虑使用软删除(一个标志,指示类别已删除),并且当应用程序获得最后修改的类别时,服务器将返回自HTTP标头传递的日期以来的所有修改的类别,包括已删除的类别。但是,如果应用程序请求所有类别(没有Last-Modified标头),则服务器将返回除已删除(标有该标记)之外的所有类别。
提出的解决方案是否是解决此问题的最佳方案?
答案 0 :(得分:2)
此问题的最佳解决方案是什么?
您可能会在网上寻找灵感。参见RFC 7234。
最高点是:网络是一个分布式系统,每个客户端都可以管理自己的本地资源表示缓存。资源通过描述其freshness的元数据传递给客户端;客户有权重用其本地状态副本,直到状态失效为止。对资源的成功不安全操作会自动退出该资源的先前缓存的表示形式,并且存在一种机制(304)使服务器可以廉价地与客户端进行通信,以告知先前缓存的表示形式仍然是最新的。
但是服务器上的更改不会自动传播到所有客户端,它们也不会从一种资源级联到另一种资源。相反,您需要独立考虑为每种资源选择正确的新鲜度策略。
这是重要的原因,认识到资源模型的设计需要满足与数据模型的设计不同的约束集。