Yii 中实现 Restful 风格的一个API

  • Yii 中实现 Restful 风格 api 的步骤

    • 创建继承自 ActiveRecord 的 model 类
    • 创建 controller 继承 yii\rest\ActiveController,设置 $modelClass 属性
    namespace app\controllers;
    use yii\rest\ActiveController;
    class UserController extends ActiveController
    {
        public $modelClass = 'app\models\User';
    }
    
    • 配置 URL 规则
    • 启用 JSON 输入
    'request' => [
        'parsers' => [
            'application/json' => 'yii\web\JsonParser',
        ]
    ]
    
  • 代码实践:写一个 /articles/:id/visited API,每次访问 MongoDB 中 article 表中 visited + 1。

  • 环境:

    • PHP -7.1.33
    • Yii2 -2.0.36
    • yii2-mongodb -2.1.9
  • Tips

    • 本文着重代码逻辑编写,不侧重许多环境的配置,包括 PHP,MongoDB,Yii2,composer 等安装配置。
  • 新建一个项目 basic

    • composer create-project yiisoft/yii2-app-basic basic
  • 使用 composer 在项目根目录(即 basic)下安装 yii2-mongodb 扩展

    • composer require --prefer-dist yiisoft/yii2-mongodb
  • 主要修改三个文件:

    • 第一个文件:basic/config/web.php

      • request 中加入以下代码,JSON 输入:
      'request' => [
          // ...
          'parsers' => [
              'application/json' => 'yii\web\JsonParser',
          ]
      ]
      
      • 修改默认 db 为 mongodb,以及 url 配置,注意下列代码 dsn 中的数据库用户名及密码配置,配置自行搜索,这不是本文重点。url 的配置是为了符合 restful api 风格:
      'mongodb' => [
          'class' => '\yii\mongodb\Connection',
          'dsn' => 'mongodb://username:pwd@localhost:27017/yii2basic',
      ],
      'urlManager' => [
          'enablePrettyUrl' => true,
          'enableStrictParsing' => true,
          'showScriptName' => false,
          'rules' => [
              'PUT <controller:[\w-]+>s/<id:>' => '<controller>/update',
              'GET <controller:[\w-]+>s/<id:[0-9]>' => '<controller>/view',
              'DELETE <controller:[\w-]+>s/<id:>' => '<controller>/delete',
              'POST <controller:[\w-]+>s' => '<controller>/create',
              'GET <controller:[\w-]+>s' => '<controller>/index',
              '<controller:[\w-]+>s/<action:[\w-]+>' => '<controller>/<action>',
              '<controller:[\w-]+>s/<id:>/<action:[\w-]+>' => '<controller>/<action>',
          ],
      ],
      
    • 第二个文件:basic/controller/ArticleController.php,这个文件是新建的,代码如下:

    <?php
    namespace app\controllers;
    
    use yii\rest\ActiveController;
    use app\models\Article;
    
    class ArticleController extends ActiveController
    {
        public $modelClass = 'app\models\Article';
    
        public function actionVisited($id)
        {
            $article = Article::findOne(['_id' => $id]);
            $article->visited = $article->visited + 1;
            $article->save();
        }
    }
    
    • 第三个文件如下:basic/models/Article.php,新建文件,代码如下:
    <?php
    
    namespace app\models;
    
    use yii\mongodb\ActiveRecord;
    
    class Article extends ActiveRecord
    {
        public function attributes()
        {
            return ['_id', 'visited'];
        }
    
        public function fields()
        {
            return ['visited'];
        }
    
        public function safeAttributes()
        {
            return ['visited'];
        }
    }
    
  • 根目录 basic 下启动服务器:php yii serve,我们没有编写 basic/views 下的文件,所以直接在浏览器访问 localhost:8080 是不起作用的,并没有视图可以展示,在这里使用一个工具–Postman,下载地址:Downloads

  • 如何使用这个工具,各位自行探索吧

    • GET 请求 url: http://localhost:8080/articles/index,获取数据库中的所有数据
    • GET 请求 url: http://localhost:8080/articles/5f1fcf4bf2c279152b73af75/visited,中间的一串字符为 mongodb 中插入数据时自动添加的 ObjectId,以这个 id 搜索数据,就会使得数据中的 visited 字段值加 1。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值