如何让 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 restful api中将两个表中的关系数据显示为json格式