Yii2 如何实现 RESTful?

技巧库 · forecho · 于 3年前 发布 · 20341 次阅读

什么是REST

简单的说,REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

为什么要Restful?

主要遵循两个准则:

  • 不要为了RESTful而RESTful
  • 在能表达清楚的情况下,简单就是美

Yii2 使用 RESTful?

其实 Yii2 框架本身就对 RESTful 是友好支持的,具体可以看官方文档,或者去看源码,都是可以的。

下面分享我写的Yii2 RESTful DEMO

具体实现可以看我的代码,有不懂的可以留言。下面我重点说一下值得注意的地方:

Yii2 RESTful 如何实现自定义方法?

新建一个 user 控制器,输入以下代码:

namespace app\controllers;

use yii\rest\ActiveController;

class UserController extends ActiveController
{
    public $modelClass = 'app\models\User';
}

然后你在浏览器里面输入 用 GET 请求 localhost/basic/web/users 这个地址是可以跑的,因为继承的 ActiveController 这个类是有对 user RESTful 表的 基本操作的,包括 GET,POST,PUT,PATCH,DELETE。所以我们要注销系统自带的实现方法,代码如下,添加到控制器中,后者自己新建一个 ActiveController 类。

public function actions()
{
   $actions = parent::actions();
    // 注销系统自带的实现方法
    unset($actions['index'], $actions['update'], $actions['create'], $actions['delete'], $actions['view']);
    return $actions;
}

然后下面我们就可以写自己的 actionIndex、actionCreate、actionUpdate 和 actionDelete 了。

实现用户验证

框架其实是提供三种验证方式的,我就说一下最长用的 token 实现验证吧。

首先你要在控制器中加入下面代码:

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['authenticator'] = [
        'class' => CompositeAuth::className(),
        'authMethods' => [
            QueryParamAuth::className(),
        ],
    ];
    return $behaviors;
}

然后你要去修改 user 的 model,具体参照这块代码:添加 restful 授权认证

参考文章

本文由 forecho 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。


如果这篇文章对您有帮助,不妨微信小额赞助我一下,让我有动力继续写出高质量的教程。

本帖已被设为精华帖!
共收到 12 条回复 RESTful
asjmtz#13年前 0 个赞

文章文字的排版看的不太舒服啊,改进下把

asjmtz#23年前 0 个赞

还有中文字体用微软雅黑比较舒服哦,英文字体的设定是没用的

zhanghuid#32年前 0 个赞

大神,你的Yii2 RESTful DEMO。我不知道从哪里入手。能给个简要的说明吗?

xjdata#42年前 0 个赞

求REST的 用户认证部分资料, 还希望@forecho 能够来一个完整的教程,谢谢。 干活集里的看了很多次,没有实际代码总是不是很明白很多。还希望能够满足我大大的愿望。谢谢。

forecho#52年前 0 个赞

@zhanghuid #3楼 @xjdata #4楼 等我有时间吧,建议你们可以先去慕课网看视频教程

zhanghuid#62年前 1 个赞

谢谢,但慕课网的视频我基本上全都看完了。就是没有看到有restful的教程。我想,大神你能不能出个视频,把你做的步骤录制一下??

mospider#72年前 0 个赞

建议restful和oauth2一同使用。

kiwigo#82年前 0 个赞

按照官方文档实现之后 localhost/basic/web/users 404

forecho#92年前 0 个赞

@kiwigo #8楼 你这个问题问的,别人怎么帮助你?建议你先看看怎么提问 http://www.getyii.com/topic/44

yexz#102年前 0 个赞

楼主定了第一个版本,可是为什么请求的不是这个下面的\modules\v1 为什么还是\controllers这个目录下面的方法

forecho#112年前 0 个赞

@yexz #10楼 嗯,确实是有这个问题, 我这个只是dome,实际项目肯定是请求 modules\v1\controllers

12楼 已删除.
fecommerce#132年前 1 个赞

之前有resuful的需求,个人整理的restful的文章:

1.yii2 RESTful 接口 api -1 : 接口的基本配置:

http://www.fancyecommerce.com/2016/05/04/yii2-restful-接口-api-1-:-接口的基本配置/

2.yii2 RESTful 接口 api -2 : 自定义函数:

http://www.fancyecommerce.com/2016/05/04/yii2-restful-接口-api-2-:-自定义函数/

3.yii2 RESTful 接口 api -3 : 账户验证 和 速度控制:

http://www.fancyecommerce.com/2016/05/04/yii2-restful-接口-api-3-:-账户验证-和-速度控制/

4.yii2 RESTful 接口 api -4: restful的测试工具:

http://www.fancyecommerce.com/2016/05/04/yii2-restful-接口-api-4:-restful的测试工具/

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册