`
dcj3sjt126com
  • 浏览: 1881654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

yii2 restful web服务[格式响应]

    博客分类:
  • Yii2
阅读更多

响应格式

当处理一个 RESTful API 请求时, 一个应用程序通常需要如下步骤 来处理响应格式:

  1. 确定可能影响响应格式的各种因素, 例如媒介类型, 语言, 版本, 等等。 这个过程也被称为 content negotiation
  2. 资源对象转换为数组, 如在 Resources 部分中所描述的。 通过 [[yii\rest\Serializer]] 来完成。
  3. 通过内容协商步骤将数组转换成字符串。 [yii\web\ResponseFormatterInterface|response formatters]] 通过 [yii\web\Response::formatters|response]] 应用程序组件来注册完成。

内容协商

Yii 提供了通过 [[yii\filters\ContentNegotiator]] 过滤器支持内容协商。RESTful API 基于 控制器类 [[yii\rest\Controller]] 在contentNegotiator 下配备这个过滤器。 文件管理器提供了涉及的响应格式和语言。 例如, 如果一个 RESTful API 请求中包含以下 header,

Accept: application/json; q=1.0, */*; q=0.1

将会得到JSON格式的响应,如下:

$ curl -i -H "Accept: application/json; q=1.0, */*; q=0.1" "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: <http://localhost/users?page=1>; rel=self,
      <http://localhost/users?page=2>; rel=next,
      <http://localhost/users?page=50>; rel=last
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

[
    {
        "id": 1,
        ...
    },
    {
        "id": 2,
        ...
    },
    ...
]

幕后,执行一个 RESTful API 控制器动作之前,[[yii\filters\ContentNegotiator]] filter 将检查 Accept HTTP header 在请求时和配置 [[yii\web\Response::format|response format]] 为 'json'。 之后的动作被执行并返回得到的资源对象或集合, [[yii\rest\Serializer]] 将结果转换成一个数组。最后,[[yii\web\JsonResponseFormatter]] 该数组将序列化为JSON字符串,并将其包括在响应主体。

默认, RESTful APIs 同时支持JSON和XML格式。为了支持新的格式,你应该 在 contentNegotiator 过滤器中配置 [[yii\filters\ContentNegotiator::formats|formats]] 属性, 类似如下 API 控制器类:

use yii\web\Response;

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['contentNegotiator']['formats']['text/html'] = Response::FORMAT_HTML;
    return $behaviors;
}

formats 属性的keys支持 MIME 类型,而 values 必须在 [[yii\web\Response::formatters]] 中支持被响应格式名称。

数据序列化

正如我们上面所描述的,[[yii\rest\Serializer]] 负责转换资源的中间件 对象或集合到数组。它将对象 [[yii\base\ArrayableInterface]] 作为 [[yii\data\DataProviderInterface]]。 前者主要由资源对象实现, 而 后者是资源集合。

你可以通过设置 [[yii\rest\Controller::serializer]] 属性和一个配置数组。 例如,有时你可能想通过直接在响应主体内包含分页信息来 简化客户端的开发工作。这样做,按照如下规则配置 [[yii\rest\Serializer::collectionEnvelope]] 属性:

use yii\rest\ActiveController;

class UserController extends ActiveController
{
    public $modelClass = 'app\models\User';
    public $serializer = [
        'class' => 'yii\rest\Serializer',
        'collectionEnvelope' => 'items',
    ];
}

那么你的请求可能会得到的响应如下 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: <http://localhost/users?page=1>; rel=self,
      <http://localhost/users?page=2>; rel=next,
      <http://localhost/users?page=50>; rel=last
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

{
    "items": [
        {
            "id": 1,
            ...
        },
        {
            "id": 2,
            ...
        },
        ...
    ],
    "_links": {
        "self": "http://localhost/users?page=1",
        "next": "http://localhost/users?page=2",
        "last": "http://localhost/users?page=50"
    },
    "_meta": {
        "totalCount": 1000,
        "pageCount": 50,
        "currentPage": 1,
        "perPage": 20
    }
}
分享到:
评论

相关推荐

    yii2框架restful url接口 认证内容的开发的分享

    Yii2提供了丰富的组件和工具来支持这些功能,如`\yii\web\Response`可以方便地设置返回的HTTP状态码和数据格式,`\yii\log\Logger`可以帮助我们记录和分析应用日志。 总的来说,Yii2框架为开发RESTful URL接口提供...

    使用yii敏捷开发web应用

    4. **RESTful API开发**:如何使用Yii构建符合REST原则的API服务。 5. **模板引擎和视图**:深入理解Yii的视图系统,使用模板和布局。 6. **社区和资源**:引导读者如何利用Yii社区获取帮助,以及相关文档和教程。 ...

    PHP Yii2框架开发

    8. **RESTful API支持**:Yii2为构建RESTful Web服务提供了强大的支持,便于实现前后端分离和移动应用开发。 9. **国际化与本地化**:内置的I18N和L10N功能,方便开发多语言应用。 10. **社区支持**:Yii2拥有活跃...

    yii2医疗实例

    Yii2的RESTful功能可以帮助快速构建这些接口,遵循HTTP协议标准,提供JSON格式的数据交换。 4. **模板引擎与视图**:Yii2的视图层使用Twig模板引擎,允许开发者创建动态、响应式的用户界面。在医疗系统中,可能需要...

    Yii2使用resful api接口

    在Yii2中,我们可以利用RESTful API来构建高效、灵活的Web服务。RESTful API是一种设计模式,它通过HTTP协议来操作资源,提供了创建、读取、更新和删除(CRUD)数据的能力。Yii2框架为构建RESTful API提供了强大的...

    管理系统系列--基于yii2的cmf管理系统.zip

    Yii2支持构建RESTful API,这在现代Web应用和移动应用开发中非常重要。通过定义路由规则和响应格式,可以轻松创建API接口供其他系统调用。 6. **安全特性** Yii2提供了多种安全机制,如CSRF(跨站请求伪造)防护...

    yii2中文开发手册

    总之,“yii2中文开发手册”和“yii2英文开发手册”是开发者在Yii2框架下进行Web开发的必备参考,它们详细地解释了框架的每一个部分,帮助开发者高效地利用Yii2构建高性能、可维护的Web应用。无论是初学者还是有经验...

    Yii2中文手册(中文教程完整版)

    Yii 2.0 权威指南 本教程的发布遵循 Yii 文档使用许可. ...RESTful Web 服务 已定稿 快速入门 已定稿 资源 已定稿 路由 已定稿 格式化响应 已定稿 授权验证 已定稿 速率限制 已定稿 版本化 已定稿 错误处理 已定稿 测试

    Yii2中Restful API原理实例分析

    Yii2框架的一个突出特点是它对RESTful API的原生支持,这意味着开发者可以很容易地创建遵循REST原则的Web服务。本文章将详细介绍Yii2中Restful API的原理,并结合源码进行分析,同时探讨其使用方法和相关注意事项。 ...

    php yii2框架 医疗平台

    Yii2还支持RESTful API开发,这意味着医疗平台可以轻松地与其他系统集成,实现数据交换。例如,移动应用可以通过API获取患者信息,或者医生可以实时更新他们的工作状态。 安全方面,Yii2框架内置了各种安全防护机制...

    Yii2 Starter Kit 2.3.2

    Yii2 Starter Kit 2.3.2 是一个基于Yii2框架构建的开发工具包,专为快速搭建Web应用提供了一套完整的解决方案。这个工具包整合了AdminLTE后台模板,为开发者提供了一个美观、功能丰富的管理界面,使得创建后台管理...

    用于Yii2openapi30YAMLYii2的RESTAPI应用程序生成器

    在给定的标题和描述中提到的“用于Yii2, openapi 3.0 YAML -&gt; Yii2的REST API应用程序生成器”是一个工具,旨在帮助开发者通过OpenAPI 3.0规范的YAML文件快速生成符合RESTful原则的API接口。OpenAPI(以前称为...

    yii2-advanced框架

    6. **RESTful API支持**:Yii2支持创建RESTful API,便于构建前后端分离的应用或移动端接口。 7. **强大的身份验证和授权**:通过RBAC(Role-Based Access Control)系统,可以轻松管理用户权限。 8. **社区支持和...

    advanced yii2框架

    Yii2 是一个基于组件、高性能的 PHP 框架...通过深入学习和实践Yii2 Advanced框架,开发者可以构建高效、安全、易于维护的企业级Web应用。同时,该框架的灵活性和强大的社区支持,使得它在PHP开发领域占据了一席之地。

    YII2框架整合H+后台UI框架

    `YII2`还支持RESTful API开发,便于前后端分离。 `H+`是一款专为后台设计的响应式HTML5 UI框架,它基于Bootstrap,提供了大量的预设组件和页面模板,如导航栏、表格、表单、模态框等,旨在简化后台界面的设计工作,...

Global site tag (gtag.js) - Google Analytics