网站收藏夹功能开发:功能参数、接口与适用条件

网站收藏夹功能开发:功能参数、接口与适用条件

网站收藏夹通常用于让登录用户保存文章、商品、图片等站内内容,并在个人页面中再次查看。开发时,核心不是复制一份内容,而是维护“用户与内容之间的收藏关系”;图片图集或素材站可以沿用同一模型,只需明确收藏对象的类型和详情页入口。个人收藏与站点编辑的精选合集是两类功能,是否支持后者应单独设计,不应默认包含在收藏夹中。

先确定收藏关系和功能边界

一条收藏记录至少需要用户标识、内容类型、内容标识和创建时间。内容类型可使用项目内部稳定的枚举值,例如 article、product、image;内容标识对应目标内容的主键。若网站只有一种可收藏内容,类型字段可以省略;若文章、图片和商品共用收藏夹,则保留类型字段,避免不同业务表中相同的 ID 被误认为同一对象。

收藏夹一般保存引用,不保存文章正文、图片文件或商品快照。展示列表时,根据收藏记录关联查询目标内容,并处理内容已删除、下架或当前用户无权查看的情况。对于图片素材站,收藏关系指向图片素材记录,缩略图、标题和授权说明仍以素材业务数据为准。这样既能减少重复数据,也能避免收藏夹展示过期副本。

还要提前决定收藏是否仅对本人可见、游客能否暂存,以及是否允许建立自定义分类。基础版本可要求用户登录,收藏默认私有;若支持游客收藏,则需要另行定义本地标识、登录后的合并规则和数据保留方式。自定义文件夹属于收藏夹的扩展模型,不能简单用“精选”代替:精选通常是站点运营内容,个人文件夹则由用户管理。

用明确的接口契约约束前后端

下面是一种可供项目采用的 REST 接口设计示例,并非某个现成网站的接口。路径和字段可以按既有规范调整,但新增、取消、查询的语义应保持一致:

  • POST /api/favorites:新增收藏,请求体包含 resourceType 和 resourceId。
  • DELETE /api/favorites/{resourceType}/{resourceId}:取消指定收藏。
  • GET /api/favorites?resourceType=image&cursor=...&limit=20:分页读取当前用户收藏,可选按内容类型筛选。
  • 详情页若需显示收藏状态,可由收藏列表判断,或提供批量状态查询;多卡片列表宜避免逐项请求造成大量接口调用。

接口应从登录凭证识别当前用户,而不是接受客户端传来的任意 userId 作为操作依据。新增时校验内容类型是否受支持、目标内容是否存在且允许收藏;取消时只操作当前用户自己的记录。响应结构应统一,便于页面区分成功、未登录、参数错误和目标内容不可用等情况。

{
  "resourceType": "image",
  "resourceId": "img_4821"
}

新增成功可返回收藏记录标识、目标类型及创建时间;若前端只需要更新按钮状态,返回简洁的 favorited: true 也足够。对重复提交,建议采用幂等语义:同一用户重复收藏同一对象,不产生多条记录,并返回可预期的成功结果。取消一个本来不存在的收藏,可以约定为成功无变化,或返回明确的“未收藏”状态;关键是前后端统一处理。

数据约束决定重复与查询是否可靠

关系表可包含 id、user_id、resource_type、resource_id、created_at 等字段。数据库应设置 (user_id, resource_type, resource_id) 唯一约束,防止并发点击或网络重试插入重复记录;列表查询通常按用户和创建时间排序,可结合实际查询增加索引。具体字段类型、主键形式和索引策略应以所用数据库及数据规模为准。

若采用文章、图片等多张业务表,通用的类型加 ID 方案不一定能建立数据库级外键。此时需要在服务层校验目标对象,并限制可接受的类型值;也可以按业务拆分关系表,换取更明确的外键约束。选择哪种方式,取决于对象种类是否稳定、查询是否统一,以及团队维护多态关联的能力。

把状态同步、权限和列表体验一起验收

详情页点击收藏后,前端可先更新按钮状态,再根据接口结果确认或回滚;不能只改图标而不处理失败响应。列表页应使用服务端分页,返回必要的内容摘要、收藏时间和下一页游标或页码。若摘要由多个内容类型组成,应按类型批量读取,避免对每条收藏分别查询一次。

开发验收至少覆盖:重复收藏不会重复入库;用户不能删除他人的记录;未登录请求按约定处理;未知类型和不存在的内容返回清晰错误;内容删除后收藏列表不会造成页面异常;分页在同一时间排序稳定。收藏数量若展示在公开页面,还需区分“本人是否收藏”和“公开计数”,并限制计数接口的权限与缓存策略。

因此,基础收藏夹可以从一张关系表、登录鉴权、幂等写入和分页读取开始。待需求明确后,再加入文件夹、批量操作或游客合并;图片素材、文章和商品只要遵循统一的对象校验与权限边界,就能复用收藏关系,而不必把内容数据重复存入收藏夹。

[责任编辑:罗友志]

为您推荐