Yii2微框架实现RESTful API

Yii2 微框架

在我与Laravel相熟多年以后,由于工作原因再次触碰到Yii2这个框架,有了更多的经验积累后再回过头来看,不由的也更对Yii这个框架及作者肃然起敬,如果说Laravel的一个成功原因在于引入Composer,那么现在包括Composer以内的其他所有特性及实现,都或多或少的早就在Yii这个框架中出现了,Yii靠着自身的真正的强大来保持还站在前线,很多功能及设计都很不错,结合Yii框架的作者又是一名华裔,我觉得这一切都非常了不起。

为什么要引入Yii2微框架?个人觉得微框架有点类似于Lumen之于Laravel的关系,部分开发者的项目本身并不需要全栈型的框架,不要给予太多多余的东西,Yii2像所有其他的框架一样太“重”了,所以现在需要看起来“轻”一点,这符合现代前后端完全分离的纯API项目开发的定位,也更有利于微服务项目部署。

1 进入workspace
mkdir micro-app

cd micro-app
2 配置 Composer.json 文件
{
    "require": {
        "yiisoft/yii2": "~2.0.0"
    },
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
}

配置完成后执行composer install安装Yii框架及其依赖。

3 创建入口文件 index.php

为了安全起见,应用会将入口文件单独放置,所以我们在项目中新建web目录,并创建index.php文件

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require __DIR__ . '/../config.php';
(new yii\web\Application($config))->run();

4 创建配置文件 config.php

它将包含所有的应用程序配置。

<?php
return [
    'id' => 'micro-app',
    // the basePath of the application will be the `micro-app` directory
    'basePath' => __DIR__,
    // this is where the application will find all controllers
    'controllerNamespace' => 'micro\controllers',
    // set an alias to enable autoloading of classes from the 'micro' namespace
    'aliases' => [
        '@micro' => __DIR__,
    ],
];
5 创建控制器目录及第一个控制器文件

新建目录controllers,并创建控制器文件SiteController.php

<?php

namespace micro\controllers;

use yii\web\Controller;

class SiteController extends Controller
{
    public function actionIndex()
    {
        return 'Hello World!';
    }
}
6 当前项目结构
./
├── composer.json
├── composer.lock
├── config.php
├── controllers
│   └── SiteController.php
├── vendor
│   ├── autoload.php
│   ├── bin
│   ├── bower-asset
│   ├── cebe
│   ├── composer
│   ├── ezyang
│   └── yiisoft
└── web
    └── index.php
7 运行

执行vendor/bin/yii serve --docroot=./web来使用 PHP 内置 web 服务器,不出意外运行结果为Hello World!

Hello World!

配置 RESTful

创建models目录及Post.php文件

1 创建帖子模型
<?php

namespace micro\models;

use yii\db\ActiveRecord;

class Post extends ActiveRecord
{ 
    public static function tableName()
    {
        return '{{post}}';
    }
}
2 添加 PostController

controllers目录中添加PostController.php文件

<?php

namespace micro\controllers;

use yii\rest\ActiveController;

class PostController extends ActiveController
{
    public $modelClass = 'micro\models\Post';

    public function behaviors()
    {
        // 这里移除rateLimiter是因为它依赖于被验证过的用户
        $behaviors = parent::behaviors();
        unset($behaviors['rateLimiter']);
        return $behaviors;
    }
}
3 可访问的路由

此时我们的 API 将提供以下 URL :

GET /posts - 列出所有帖子
GET /posts/1 - 显示 ID 为 1 的帖子
POST /posts/1 - 创建一个帖子
PUT /posts/1 - 更新 ID 为 1 的帖子
DELETE /posts/1 - 删除 ID 为 1 的帖子

完成这种RESTful的路由我事先已经配置好了Nginx

location / {
         try_files $uri $uri/ /index.php$is_args$args;
}
4 JSON API

目前API仅将 urlencoded 表单数据理解为输入,若使其成为真正的 JSON API,我们还需要一个JSON解析器。
config.php的components配置中加入以下代码完成配置。

'request' => [
    'parsers' => [
        'application/json' => 'yii\web\JsonParser',
    ]
]

本文首发于Gecco’s Blog,文章地址:https://ibabysong.com/posts/201910163.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值