如何让 Yii2 rest api 默认使用 json 输出?

Posted

技术标签:

【中文标题】如何让 Yii2 rest api 默认使用 json 输出?【英文标题】:How to make Yii2 rest api use json output by default? 【发布时间】:2016-11-25 08:38:43 【问题描述】:

我已经像这样配置了 rest api: http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html

如何让Yii2 rest api默认输出json而不是xml?

【问题讨论】:

RESTful response how to return JSON instead of XML in Yii2?的可能重复 【参考方案1】:

这取决于你所说的默认是什么意思。可能的选择:

    如果您在浏览器中打开端点,您只想显示 json 客户端未发送Accept:标头 客户端已发送Accept: 标头,但您的端点不支持任何一种请求格式

在第一种情况下,您应该默认为 text/html 定义 json。

在第二种情况下,还要添加application/octet-stream,因为它在 HTTP 协议中被定义为默认值(proof、proof)。如果这不起作用,您也可以在您的 nginx 或 apache 中进行适当的配置。

在第三种情况下ContentNegotiator 将抛出异常415 Unsupported Media Type。您也可以通过网络服务器配置来处理它,但是这是错误的。 IE。如果客户端请求了一个图像并且只有图像,你不应该发送 json,因为这对于客户端来说是不可接受的。使用 HTTP 标头 415 将正确通知客户端不支持该格式。

我在我的项目中使用以下配置和 API:

$config = [
    'as contentNegotiator' => [
        'class' => \yii\filters\ContentNegotiator::className(),
        'formatParam' => '_format',
        'formats' => [
            'application/octet-stream' => \yii\web\Response::FORMAT_JSON,
            'text/html' => \yii\web\Response::FORMAT_JSON,
            'application/json' => \yii\web\Response::FORMAT_JSON,
            'application/xml' => \yii\web\Response::FORMAT_XML,
        ],
    ],

【讨论】:

【参考方案2】:

来自您使用的客户端:

curl -i -H "Accept:application/json" "http://localhost/myendpoint"

似乎 JSON 应该是默认值,但 Yii2 它是 XML。见:

RESTful response how to return JSON instead of XML in Yii2?

和/或深入研究文档:http://yiiframework.com/doc-2.0/yii-filters-contentnegotiator.html

【讨论】:

我知道。默认情况下我想要 json

以上是关于如何让 Yii2 rest api 默认使用 json 输出?的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 Rest API 承载认证

如何在yii2 restful api中将两个表中的关系数据显示为json格式

yii2 RESTful api的详细使用

Yii2 使用 RESTful 写API接口 实例

使用令牌实现 RESTful API 身份验证 (Yii/Yii2)

yii2 rest api异常处理