响应格式

当处理一个 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 web服务[格式响应]相关推荐

  1. restful api_将Spring MVC RESTful Web服务迁移到Spring 4

    restful api 1引言 Spring 4为MVC应用程序带来了一些改进. 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试 ...

  2. 构建 RESTful Web 服务

    from: https://www.ibm.com/developerworks/cn/education/java/j-rest/j-rest.html 开始之前 关于本教程 REST 是一种思维方 ...

  3. RESTful Web 服务 - 安全性

    因为 RESTful Web 服务使用 HTTP URLs 路径,因此以保护网站同样的方式维护 RESTful Web 服务是非常重要的.以下是设计 RESTful Web 服务时要遵循的最佳实践. ...

  4. RESTful Web 服务 - 消息

    RESTful Web 服务使用 HTTP 协议作为客户端和服务器之间的通信媒介.客户端发送一个 HTTP 请求形式的消息,然后服务器按照 HTTP 响应形式的响应.这种技术被称为消息传递.这些消息包 ...

  5. 使用Spring开发Java RESTful Web服务的7个理由

    REST现在已成为开发Web服务的标准方法,涉及Java时,可以使用许多框架和库,例如JAX-RS,Restlet,Jersey,RESTEasy,Apache CFX等,但是我鼓励Java开发人员使 ...

  6. restful web_泽西岛的RESTful Web服务

    restful web 我已经讨论了有关体系结构考虑事项<< link >>的早期文章,以成为可在我的系统/机器上使用的分布式环境上的RESTful系统. 本文我们将讨论如何基 ...

  7. resteasy_Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务– Eclipse和Maven项目

    resteasy 开发Web服务的RESTful方法不断受到越来越多的关注,并且似乎正在将SOAP淘汰. 我不会讨论哪种方法更好,但是我相信我们都同意REST更轻量级. 在本教程中,我将向您展示如何使 ...

  8. 将Spring MVC RESTful Web服务迁移到Spring 4

    1引言 Spring 4为MVC应用程序带来了一些改进 . 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试这些改进.以下几点总结 ...

  9. 泽西岛的RESTful Web服务

    我已经讨论了有关体系结构注意事项<< link >>的早期文章,以成为可在我的系统/机器上使用的分布式环境上的RESTful系统. 本文我们将讨论如何基于REST体系结构考虑来 ...

  10. Tomcat 7上具有RESTeasy JAX-RS的RESTful Web服务-Eclipse和Maven项目

    开发Web服务的RESTful方法不断受到越来越多的关注,并且似乎正在将SOAP淘汰. 我不会讨论哪种方法更好,但是我相信我们都同意REST更轻量级. 在本教程中,我将向您展示如何使用RESTeasy ...

最新文章

  1. react native 报错:cannot read property 'length' of undefined
  2. 中缀表达式转换成后缀表达式
  3. 最优控制理论 一、变分法和泛函极值问题
  4. mysql 迁移表时忽略索引_Mysql迁移新环境索引损坏
  5. 微型计算机作为载体的部件是,大工11秋《计算机应用基础》辅导资料二
  6. linux网卡不响应arp,Linux中的网络配置和故障排除命令,学会不会吃亏
  7. 男人如何在不经常锻炼的情况下,慢慢消除大肚皮,恢复好身材?
  8. 四十二、在线预览pdf文件
  9. Java学习的正确打开方式
  10. 在pcb放置坐标标注_PCB拼板上的那颗美人痣
  11. mysql主主同步机制+keepalived实现MySQL高可用
  12. hsqldb mysql_HSQLDB简介
  13. 【开发环境简称】PRD生产环境-常见环境英文缩写简称
  14. matlab 警告:警告: 更新 Legend 时出错。Not enough input arguments.
  15. CTA-敏感行为-修改联系人(新建/更新/删除)
  16. win10开始菜单 此计算机,详细教您win10开始菜单打不开怎么办
  17. python压缩教程_如何使用Python压缩/解压缩zip文件?(代码示例)
  18. win10系统下安装打印机驱动
  19. oracle10漏洞补丁下载,Oracle漏洞修复工具
  20. 对于iPhone5分辨率兼容性调整问题 .

热门文章

  1. MODIS数据批量下载
  2. QQ音乐下载的flac文件转码mp3文件
  3. Ueditor编辑器修改字体和字号?
  4. 如何才能实现文字转语音播放?只要这三个步骤就能快速搞定!
  5. 在线答题助手c语言源码,开源的在线答题小程序
  6. WEB数据库管理平台kb-dms:功能简介【一】
  7. qq令牌64位密钥提取_令牌QQ号代码64位数字+字母只截图保存可转换文字再来获取口令...
  8. HCNA 认证课程笔记(1)
  9. 平面设计如何才能自学会?需要掌握什么技能?
  10. ShxViewer_SHX字体查看