首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让Yii2 rest api默认使用json输出?

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

Stack Overflow用户
提问于 2016-07-22 00:25:35
回答 2查看 2.3K关注 0票数 1

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

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

EN

回答 2

Stack Overflow用户

发布于 2016-07-22 00:29:09

从您使用的客户端:

代码语言:javascript
运行
复制
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

票数 0
EN

Stack Overflow用户

发布于 2016-07-22 02:08:55

这取决于你默认的意思。可能的选项:

  1. 如果在浏览器中打开终结点,您只想显示json如果您在浏览器中打开终结点
  2. 客户端未发送Accept:标头
  3. 客户端已发送Accept:标头但您的终结点

不支持任何请求的格式

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

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

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

我通过API将以下配置用于我的项目:

代码语言:javascript
运行
复制
$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,
        ],
    ],
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38509552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档