Skip to content

feat: 添加收藏/取消收藏 HTTP REST API#566

Open
lkisme wants to merge 2 commits intoxpzouying:mainfrom
lkisme:feature/http-favorite-only
Open

feat: 添加收藏/取消收藏 HTTP REST API#566
lkisme wants to merge 2 commits intoxpzouying:mainfrom
lkisme:feature/http-favorite-only

Conversation

@lkisme
Copy link
Copy Markdown

@lkisme lkisme commented Mar 10, 2026

基于PR: #531 ,隔离出来收藏/取消收藏的功能。

新功能:

POST /api/v1/feeds/favorite - 收藏/取消收藏笔记

已测试

新功能:
- POST /api/v1/feeds/favorite - 收藏/取消收藏笔记
- POST /api/v1/feeds/like - 点赞/取消点赞笔记
- POST /api/v1/feeds/favorite/batch - 批量收藏(并发 3 个)

优化:
- 批量并发收藏,7 个帖子从 70 秒优化到 30 秒(提升 57%)
- 添加超时控制(60 秒/请求)和 panic 恢复
- 每个并发请求独立浏览器实例,符合 PR xpzouying#12 设计原则
- 代码格式化 (gofmt)

测试:
- 已成功收藏并取消收藏 7 个帖子
- 单个收藏耗时 ~10 秒
- 批量收藏 (7 个,并发 3) 耗时 ~30 秒

文档:
- 新增 HTTP_API_USAGE.md 使用文档
- 更新.gitignore 排除编译产物

Co-authored-by: Jari <jari@assistant>
@lkisme lkisme requested a review from xpzouying as a code owner March 10, 2026 05:39
@kimi-agent-bot
Copy link
Copy Markdown
Contributor

🔍 Kimi Code Agent 正在自动审查此 PR...

@kimi-agent-bot
Copy link
Copy Markdown
Contributor

我来对这个 PR 进行代码审查。首先获取 PR 信息和 diff。
现在我来分析这个 PR 的代码变更,并给出审查意见。

📋 PR 审查报告

基本信息

项目 内容
PR 标题 Feature/http favorite only
作者 @lkisme
关联 PR #531
新增功能 收藏/取消收藏笔记 HTTP API

🔍 代码变更概览

文件 变更类型 说明
.gitignore 修改 添加编译产物忽略规则
handlers_api.go 新增 favoriteFeedHandler 处理函数
routes.go 新增 /feeds/favorite 路由
types.go 新增 FavoriteFeedRequest 请求结构体

✅ 审查意见

1. 功能实现 - ✅ 通过

  • 实现了收藏和取消收藏的双向功能,通过 Unfavorite 字段控制
  • 复用了 xiaohongshuServiceFavoriteFeedUnfavoriteFeed 方法
  • 错误处理和成功响应格式统一

2. 参数验证 - ✅ 通过

// 代码中做了完善的参数校验
if req.FeedID == "" { ... }
if req.XsecToken == "" { ... }
  • 对必填参数 feed_idxsec_token 进行了验证
  • 使用了 ShouldBindJSON 进行请求体绑定

3. API 设计 - ⚠️ 建议优化

建议 1:RESTful 风格优化
当前使用 unfavorite 布尔字段控制操作,建议考虑 RESTful 风格:

POST   /api/v1/feeds/{feed_id}/favorite      // 收藏
DELETE /api/v1/feeds/{feed_id}/favorite      // 取消收藏

或者保持现有设计但使用更明确的 action:

POST /api/v1/feeds/favorite       // body: {action: "favorite"}
POST /api/v1/feeds/favorite       // body: {action: "unfavorite"}

4. 代码风格 - ✅ 通过

  • 命名规范:favoriteFeedHandlerFavoriteFeedRequest 符合 Go 命名约定
  • 注释完整:函数和结构体都有中文注释
  • 错误信息使用中文,与用户友好的消息和内部错误详情分离

5. 安全性 - ⚠️ 注意点

  • XsecToken 是敏感参数,确保在日志中不会记录此字段
  • 建议在 FavoriteFeedRequest 添加注释提醒:
// FavoriteFeedRequest 收藏笔记请求
type FavoriteFeedRequest struct {
    FeedID     string `json:"feed_id" binding:"required"`
    XsecToken  string `json:"xsec_token" binding:"required"` // 敏感信息,请勿记录到日志
    Unfavorite bool   `json:"unfavorite,omitempty"`
}

6. .gitignore 修改 - ✅ 通过

新增的编译产物忽略规则合理:

xiaohongshu-mcp-linux-amd64*
xiaohongshu-mcp-darwin-*
xiaohongshu-mcp-windows-*

📝 总结

检查项 结果
代码功能 ✅ 正常
参数验证 ✅ 完善
错误处理 ✅ 规范
RESTful 设计 ⚠️ 可优化
安全性 ⚠️ 注意敏感字段

总体评价: 代码质量良好,功能完整,可以合并。建议后续考虑 RESTful API 风格优化,并注意敏感字段的日志处理。


@lkisme 感谢贡献!代码整体质量不错,API 设计可以考虑上述建议进一步优化。请问是否已对相关接口进行过单元测试或集成测试?

@lkisme lkisme changed the title Feature/http favorite only feat: 添加收藏/取消收藏 HTTP REST API Mar 10, 2026
@lkisme lkisme force-pushed the feature/http-favorite-only branch from 7854391 to 392910a Compare March 10, 2026 06:03
@lkisme
Copy link
Copy Markdown
Author

lkisme commented Mar 10, 2026

已按照建议进行修改

新增:
- POST /api/v1/feeds/favorite - 收藏/取消收藏笔记
- FavoriteFeedRequest 请求结构体,使用 action 字段控制操作类型
- favoriteFeedHandler 处理函数

优化:
- 使用 action 字段替代 unfavorite 布尔字段,更明确的 API 设计
- 为 XsecToken 添加敏感信息注释
- 移除手动校验,使用 ShouldBindJSON 自动校验 required 字段

删除:
- HTTP_API_USAGE.md
@lkisme lkisme force-pushed the feature/http-favorite-only branch from 392910a to 4381cf3 Compare March 10, 2026 07:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant