yii2.0 基于RESTful的接口的几种请求方式, 举例说明

RESTful 风格的 API 包括:

    GET /users: 逐页列出所有用户    
    HEAD /users: 显示用户列表的概要信息
    POST /users: 创建一个新用户
    GET /users/123: 返回用户 123 的详细信息
    HEAD /users/123: 显示用户 123 的概述信息
    PATCH /users/123 and PUT /users/123: 更新用户123
    DELETE /users/123: 删除用户123
    OPTIONS /users: 显示关于末端 /users 支持的动词
    OPTIONS /users/123: 显示有关末端 /users/123 支持的动词

在项目中, 我们常用的也就是 增-POST, 删-DELETE, 改-PUT, 查-GET, 那么现在我将 一一说明,并注图辅助

1: POST

他对于我们来说,就是添加,我们通常可以自己写添加方法,注销框架内默认的CreateAction

yii2.0 基于RESTful的接口的几种请求方式, 举例说明_第1张图片

注意事项:

            1): 就是你要遵循你的表的要求,去添加元素,例如: 我的表中的mobile是唯一的,所以如果你要是添加重复的话,他会报错的

            2): 添加/修改时,他自己默认的是要有场景default的,如果你没有,也是不行的,它默认的是default场景,你可以在你的model类里面添加场景          

  public function scenarios()
    {
        return [
          
            'default' => ['mobile', 'username'],
        ];
    }

2: DELETE, 我没有用自己的删除方法,而是用的默认的

3: PUT修改, 同时也要注意场景的问题

yii2.0 基于RESTful的接口的几种请求方式, 举例说明_第2张图片

4: GET查

针对默认的IndexAction方法,如果你仔细看框架里面的源码,你会发现,他有一些是不符合业务逻辑的,例如我们查询信息时,它默认查询所有了,那如果我们不想要查询敏感字段,怎么办?还有,我们想默认只查询没被删除的用户信息,怎么办?这是此时办不到的,那我们在用他自己的方法的同时,给它改变一些,如图所示:

1): 实现只查询未删除的用户

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

    // 自定义数据indexDataProvider覆盖IndexAction中的prepareDataProvider()方法
    $actions['index']['prepareDataProvider'] = [$this, 'indexDataProvider'];

    return $actions;
}

public function indexDataProvider()
{
    /* @var $modelClass \yii\db\BaseActiveRecord */
    $modelClass = $this->modelClass;

    return new ActiveDataProvider([
        'query' => $modelClass::find()->where(['!=', 'status', UserBaseInfo::USER_DEL_STATUS]),
    ]);
}
2): // 过滤掉一些字段,适用于你希望继承父类实现同时你想屏蔽掉一些敏感字段


    public function fields()
    {
        $fields = parent::fields();

        // 删除一些包含敏感信息的字段
        unset($fields['password'], $fields['password_salt']);

        return $fields;
    }

用restful中的内置的一些方法的好处是: 他实现的功能非常多,省去了我们自己要写的方法

如你所见,在 headers 响应,有关于总数,页数的信息,等等。还有一些链接,让你导航到其他页面的数据

你可以访问你的API用curl命令如下,

$ curl -i -H "Accept:application/json" "http://localhost/users"

HTTP/1.1 200 OK
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
X-Powered-By: PHP/5.4.20
X-Pagination-Total-Count: 1000
X-Pagination-Page-Count: 50
X-Pagination-Current-Page: 1
X-Pagination-Per-Page: 20
Link: ; rel=self, 
      ; rel=next, 
      ; rel=last
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

6: 而对于access-token验证的问题,大家可以看yii2.0官网的http://www.yiichina.com/doc/guide/2.0/rest-authentication,或者之前我看的时候有一个大神的博客:https://github.com/iiYii/yii2-rest-demo/commit/02db1711bcaa42040360d50ffcf771626474f5ad


 心得: 好快啊,虽然我是写博客的一个新手,不过从开始写,到现在坚持写了十几篇吧,可能对于大神来说,我的博客都是太low了,但是对于我来说是一个成长的见证,现在我是一个刚工作半年的菜鸟,但我相信只要努力,一定有成为大神的那一天的.....今天晚上的火车,马上就该回家了,哈哈,我又可以看到我最爱的家人了,这次假期好好放松,等过完年,继续再战....加油!!


你可能感兴趣的:(yii2.0 基于RESTful的接口的几种请求方式, 举例说明)