代码之家  ›  专栏  ›  技术社区  ›  systemdebt

REST api和缓存

  •  0
  • systemdebt  · 技术社区  · 4 年前

    我有一个名为网站的资源。

    我计划有一个端点,如下所示:

    /tenant/:tenantId/sites/:siteId

    端点是返回一个站点树,该树将根据从JWT令牌中提取的userId而变化。

    1. 由于它会根据请求它的用户而变化,端点是否应该在URI中有userId——可以作为查询参数?

    2. 在这种情况下,缓存应该如何工作?

    此端点返回的站点树也将根据另一资源(即用户/组)中的更新而更改

    当站点资源本身发生变化或组发生变化时,是否应丢弃所有用户的缓存?

    我正在使用API网关,所以当任何资源更新时,需要通过客户端缓存控制头清除缓存。

    0 回复  |  直到 4 年前
        1
  •  2
  •   jain.saloni91    4 年前
    1. 由于数据会因请求数据的用户而异,端点的URI中应该有userId——它可以只是一个类似于 tenantId siteId

    2. 缓存可以基于 If-modified-since 标头以指示数据是否已更改。

    If Modified Since HTTP标头指示浏览器首次从服务器下载资源的时间。这有助于确定资源自上次访问以来是否发生了更改。

        2
  •  1
  •   JArgente    4 年前
    1. 从安全角度来看,如果用户只能访问自己的网站,则用户id不应在路径(或查询参数)上,因为如果这样做,任何用户都可以在浏览器中修改URL并尝试访问其他用户网站。为了避免URL不应该有任何userId(您可以用/me之类的东西替换它),并且将处理请求的服务应该从令牌中提取id信息

    2. 我不知道您是否使用分布式缓存的内存缓存,站点/用户/组是否是不同的服务(部署在不同的服务器上),或者它们是否位于同一个应用程序中,无论如何,当缓存所依赖的任何资源被修改时,您应该使该用户的缓存无效