Yii框架RESTful接口适合社交吗_Yii框架用户关系接口设计【解答】

夜枫大大_1144

夜枫大大_1144

2026-04-27

579人浏览

原创

yii默认activecontroller不适用于关注/取关,因其仅提供crud模板,而关注是需校验合法性、事务保障和状态一致性的语义化操作,须手写actionfollow/actionunfollow并合理设计rest路由与缓存。

yii框架restful接口适合社交吗_yii框架用户关系接口设计【解答】

Yii 框架的 RESTful 接口完全适合社交类应用,但直接套用默认 ActiveController 处理用户关系(如关注、互粉、黑名单)会很快遇到权限、状态一致性、性能三重卡点。

为什么默认 ActiveController 不能直接用于关注/取关

它只提供 CRUD 模板,而“关注”不是资源创建,是带语义的状态变更操作:

  • POST /users/123/follow 不是创建 UserFollow 资源,而是检查双方状态、更新时间戳、触发通知——ActiveController::actionCreate() 无法自然表达这种逻辑
  • 默认不校验操作合法性:用户 A 关注自己、重复关注、对已拉黑用户发起关注,都会绕过验证直接写库
  • 没有内置事务包裹:关注成功但通知失败,会导致数据与业务状态不一致

actionFollow() 和 actionUnfollow() 必须手写

把关注逻辑收束到独立动作里,才能控制流程和边界。示例结构:

public function actionFollow($id)
{
    $target = $this->findModel($id);
    $follower = Yii::$app->user->identity;

    if ($follower->id == $target->id) {
        throw new BadRequestHttpException('Cannot follow yourself');
    }

    $relation = UserFollow::find()
        ->where(['follower_id' => $follower->id, 'followee_id' => $target->id])
        ->one();

    if ($relation) {
        throw new BadRequestHttpException('Already following');
    }

    $relation = new UserFollow([
        'follower_id' => $follower->id,
        'followee_id' => $target->id,
        'created_at' => time(),
    ]);

    // 必须显式开启事务
    $transaction = Yii::$app->db->beginTransaction();
    try {
        $relation->save();
        // 可选:发消息、更新粉丝数缓存等
        $transaction->commit();
    } catch (\Exception $e) {
        $transaction->rollBack();
        throw $e;
    }
}

注意:$id 是被关注用户的 ID,不是当前登录用户 ID;路由需配置为 'POST follow' => 'follow',而非依赖自动映射。

RESTful 路由设计要区分「资源」和「动作」

别强行把所有行为塞进 /users/{id}。更清晰的划分:

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • GET /users/{id}/followers → 获取粉丝列表(可复用 ActiveController 的 actionIndex,但需重写 dataProvider)
  • GET /users/{id}/following → 获取关注列表
  • POST /users/{id}/follow → 手写 actionFollow
  • DELETE /users/{id}/follow → 手写 actionUnfollow
  • GET /users/me/relationships → 当前用户与目标用户的关系快照(是否互关、是否拉黑),这个接口根本不需要对应模型,纯查表组合

混用资源路径和动作路径是常见误区,Yii 的 UrlRule 支持 extraPatterns 精确控制,别怕多配几条。

缓存和并发问题比想象中早出现

社交关系读多写少,但“是否已关注”这类判断每页请求都可能调用多次。不加缓存,单次首页加载就可能触发十几次 UserFollow::find()->exists() 查询。

建议在 UserFollow 模型层封装带缓存的检查方法:

public static function isFollowing($followerId, $followeeId)
{
    $key = "uf:{$followerId}:{$followeeId}";
    $cached = Yii::$app->cache->get($key);
    if ($cached !== false) {
        return $cached;
    }

    $exists = self::find()
        ->where(['follower_id' => $followerId, 'followee_id' => $followeeId])
        ->exists();

    Yii::$app->cache->set($key, $exists, 3600); // 缓存 1 小时
    return $exists;
}

注意:缓存失效必须在 follow/unfollow 后主动清除,不能只靠 TTL;高并发下考虑用 Lua 脚本保证原子性,否则可能缓存击穿。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii框架 yii

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

2025.11.26

524

16

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

2930

22

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

2026.10.08

0

20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

80

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

100

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

300

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习

Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习