小编Wes*_*ter的帖子

URL查询参数或媒体类型参数(在Accept标头中)配置对HTTP请求的响应?

我正在设计一个可以使用各种格式进行响应的REST API,其中一种格式是纯文本格式,可以配置为显示或隐藏响应中的某些方面(例如章节标题或脚注).完成此操作的传统方式是通过URL查询参数,以指示所需的响应类型和配置选项,例如:

http://api.example.com/foo-book/ch1/?format=text&headings=false&footnotes=true
Run Code Online (Sandbox Code Playgroud)

但是,更优雅的RESTful方式来指示所需的响应类型(而不是format=textURL查询参数)是使用Accept标头,例如:

Accept: text/plain; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

现在,除了URL之外,媒体类型可以根据RFC 2046获取参数,如普遍存在text/html; charset=utf-8Accept标题中所示audio/*; q=0.2.它还表明供应商制作的MIME类型可以定义自己的参数,如:

application/vnd.example-com.foo+json; version=1.0
application/vnd.example-info.bar+xml; version=2.0
Run Code Online (Sandbox Code Playgroud)

因此,对于以前注册的MIME类型,如text/htmlapplication/json,是否可以包含应用程序需求的自定义参数?例如:

Accept: text/plain; charset=utf-8; headings=false; footnotes=true
Run Code Online (Sandbox Code Playgroud)

这似乎是一个优雅的RESTful解决方案,但它似乎也会违反某些东西.RFC2046§1说:

Parameters are modifiers of the media subtype, and as such do not
fundamentally affect the nature of the content.  The set of
meaningful parameters depends on the media type and subtype.  Most
parameters are associated with a single …
Run Code Online (Sandbox Code Playgroud)

api rest mime http mime-types

16
推荐指数
1
解决办法
1万
查看次数

为什么从未调用过ArrayIterator子类的构造函数?

我很困惑为什么一个子类ArrayIterator永远不会__construct调用它的方法.考虑这个例子:

<?php

class ConstructorException extends Exception {}

class Foo extends ArrayObject {
    function __construct( $arr = array(), $flags = 0, $iterator = 'ArrayIterator' ) {
        $iterator = 'FooIterator';
        parent::__construct( $arr, $flags, $iterator );
    }
}

class FooIterator extends ArrayIterator {
    function __construct( $array = array(), $flags = 0 ) {
        throw new ConstructorException( 'HELLO WORLD' ); // I AM NEVER CALLED.
        parent::__construct( $array, $flags );
    }
}

try {
    $f = new Foo( array( 1, 2, …
Run Code Online (Sandbox Code Playgroud)

php iterator

13
推荐指数
1
解决办法
450
查看次数

标签 统计

api ×1

http ×1

iterator ×1

mime ×1

mime-types ×1

php ×1

rest ×1