快速入门

    • 支持 Active Record 类的通用API的快速原型
    • 涉及的响应格式(在默认情况下支持 JSON 和 XML)
    • 支持可选输出字段的定制对象序列化
    • 适当的格式的数据采集和验证错误
    • 支持
    • 有适当HTTP动词检查的高效的路由
    • 内置和HEAD动词的支持
    • 认证和授权
    • 数据缓存和HTTP缓存
    • 速率限制

    如下, 我们用一个例子来说明如何用最少的编码来建立一套RESTful风格的API。

    假设你想通过 RESTful 风格的 API 来展示用户数据。用户数据被存储在用户DB表,
    你已经创建了 [[yii\db\ActiveRecord|ActiveRecord]] 类 app\models\User 来访问该用户数据.

    首先,创建一个控制器类 app\controllers\UserController 如下,

    控制器类扩展自 [[yii\rest\ActiveController]]。
    通过指定 [[yii\rest\ActiveController::modelClass|modelClass]]
    作为 app\models\User, 控制器就能知道使用哪个模型去获取和处理数据。

    然后,修改有关在应用程序配置的urlManager组件的配置:

    1. 'urlManager' => [
    2. 'enablePrettyUrl' => true,
    3. 'enableStrictParsing' => true,
    4. 'showScriptName' => false,
    5. 'rules' => [
    6. ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
    7. ]

    上面的配置主要是为user控制器增加一个 URL 规则。这样,
    用户的数据就能通过美化的 URL 和有意义的 http 动词进行访问和操作。

    为了使 API 接收 JSON 格式的输入数据,配置 request 应用程序组件的 [[yii\web\Request::$parsers|parsers]]
    属性使用 [[yii\web\JsonParser]] 用于JSON输入:

    随着以上所做的最小的努力,你已经完成了创建用于访问用户数据
    的 RESTful 风格的 API。你所创建的 API 包括:

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

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

    1. $ curl -i -H "Accept:application/json" "http://localhost/users"
    2. HTTP/1.1 200 OK
    3. ...
    4. X-Pagination-Total-Count: 1000
    5. X-Pagination-Page-Count: 50
    6. X-Pagination-Current-Page: 1
    7. X-Pagination-Per-Page: 20
    8. Link: <http://localhost/users?page=1>; rel=self,
    9. <http://localhost/users?page=2>; rel=next,
    10. <http://localhost/users?page=50>; rel=last
    11. Content-Type: application/json; charset=UTF-8
    12. [
    13. {
    14. "id": 1,
    15. ...
    16. },
    17. "id": 2,
    18. ...
    19. },
    20. ...
    21. ]

    试着改变可接受的内容类型为application/xml
    你会看到结果以 XML 格式返回:

    以下命令将创建一个新的用户通过发送JSON格式的用户数据的 POST 请求:

    1. $ curl -i -H "Accept:application/json" -H "Content-Type:application/json" -XPOST "http://localhost/users" -d '{"username": "example", "email": "user@example.com"}'
    2. HTTP/1.1 201 Created
    3. ...
    4. Location: http://localhost/users/1
    5. Content-Length: 99
    6. Content-Type: application/json; charset=UTF-8

    如你所见,在 headers 响应,有关于总数,页数的信息,等等。
    还有一些链接,让你导航到其他页面的数据。例如: http://localhost/users?page=2
    会给你的用户数据的下一个页面。

    使用 fieldsexpand 参数,你也可以指定哪些字段应该包含在结果内。
    例如:URL http://localhost/users?fields=id,email 将只返回 idemail 字段。

    使用 Yii 框架的 RESTful 风格的 API, 在控制器的动作中实现API末端,使用
    控制器来组织末端接口为一个单一的资源类型。

    从 [[yii\base\Model]] 类扩展的资源被表示为数据模型。
    如果你在使用(关系或非关系)数据库,推荐你使用 [[yii\db\ActiveRecord|ActiveRecord]]
    来表示资源。

    你可以使用 [[yii\rest\UrlRule]] 简化路由到你的 API 末端。