Yii2框架RESTful API 快速入门

一、目录结构

实现一个简单地RESTful API只需用到三个文件。目录如下:

1

2

3

4

5

6

7

frontend

    ├─ config

    │   └ main.php

    ├─ controllers

    │   └ BookController.php

    └─ models

        └ Book.php

二、配置URL规则

1.修改服务器的rewrite规则,将所有URL全部指向index.php上,使其支持 /books/1 格式。

如果是Apache服务器,在frontend/web/ 目录中新建.htaccess文件。文件内容如下:

1

2

3

4

5

6

RewriteEngine on

# If a directory or a file exists, use the request directly

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteCond %{REQUEST_FILENAME} !-d

# Otherwise forward the request to index.php

    RewriteRule . index.php

如果是Nginx服务器,修改nginx/conf/nginx.conf,在当前"server{}"的"location / {}"中添加下面内容:

1

2

3

location / {

  try_files $uri $uri/ /index.php$is_args$args;

}

2.修改frontend/config/main.php文件,为book控制器增加一个 URL 规则。这样,就能通过美化的 URL 和有意义的 http 动词进行访问和操作数据。配置如下:

1

2

3

4

5

6

7

8

9

10

'components' => [

    'urlManager' => [

        'enablePrettyUrl' => true,

        'enableStrictParsing' => true,

        'showScriptName' => false,

        'rules' => [

            ['class' => 'yii\rest\UrlRule''controller' => 'book'],

        ],

    ],

],

三、创建一个model

1.在数据库中创建一张book表。book表的内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

-- ----------------------------

-- Table structure for book

-- ----------------------------

DROP TABLE IF EXISTS `book`;

CREATE TABLE `book` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` char(50) NOT NULL DEFAULT '',

  `num` tinyint(3) unsigned NOT NULL DEFAULT '0',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of book

-- ----------------------------

INSERT INTO `book` VALUES ('1''toefl''10');

INSERT INTO `book` VALUES ('2''ielts''20');

INSERT INTO `book` VALUES ('3''sat''30');

INSERT INTO `book` VALUES ('4''gre''40');

INSERT INTO `book` VALUES ('5''gmat''50');

2.在frontend/models/目录中新建Book.php。文件内容如下:

1

2

3

4

5

6

7

8

9

namespace frontend\models;

use yii\db\ActiveRecord;

class Book extends ActiveRecord

{

    public static function tableName()

    {

        return 'book';

    }

}

四、创建一个控制器

在frontend/controllers/目录中新建BookController.php。控制器类扩展自 yii\rest\ActiveController。通过指定 yii\rest\ActiveController::modelClass 作为 frontend\models\Book, 控制器就能知道使用哪个模型去获取和处理数据。文件内容如下:

1

2

3

4

5

6

namespace frontend\controllers;

use yii\rest\ActiveController;

class BookController extends ActiveController

{

    public $modelClass 'frontend\models\Book';

}

五、测试

到这里,我们就已经完成了创建用于访问用户数据 的 RESTful 风格的 API。创建的 API 包括:

1

2

3

4

5

6

7

8

9

GET /books: 列出所有的书

HEAD /books: 显示书的列表的概要信息

POST /books: 新增1本书

GET /books/1: 返回 书ID=1的详细信息

HEAD /books/1: 显示 书ID=1的概述信息

PATCH /books/1 and PUT /books/1: 更新书ID=1的信息

DELETE /books/1: 删除书ID=1的信息

OPTIONS /books: 显示关于末端 /books 支持的动词

OPTIONS /books/1: 显示有关末端 /books/1 支持的动词

可以通过Web浏览器中输入 URL http://{frontend的域名}/books 来访问API,或者使用一些浏览器插件来发送特定的 headers 请求,比如Firefox的RestClient、Chrome的Advanced Rest Client、postman等。

六、说明

1.Yii 将在末端使用的控制器的名称自动变为复数。这是因为 yii\rest\UrlRule 能够为他们使用的末端全自动复数化控制器。可以通过设置yii\rest\UrlRule::pluralize为false来禁用此行为:

1

2

3

'rules' => [

    ['class' => 'yii\rest\UrlRule''controller' => 'book''pluralize' => false],

],

2.可以使用fields和expand参数指定哪些字段应该包含在结果内。例如:URL http://{frontend的域名}/books?fields=name,num 将只返回 name 和 num 字段。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程工人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值