yii\rest\Controller提供的大多数RESTful API功能通过过滤器实现. 特别是以下过滤器会按顺序执行:
- yii\filters\ContentNegotiator: 支持内容协商。
- yii\filters\VerbFilter: 支持HTTP 方法验证;
- yii\filters\AuthMethod: 支持用户认证;
- yii\filters\RateLimiter: 支持频率限制.
这些过滤器都在yii\rest\Controller::behaviors()方法中声明。原本的声明如下:
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'contentNegotiator' => [
'class' => ContentNegotiator::className(),
'formats' => [
'application/json' => Response::FORMAT_JSON,
'application/xml' => Response::FORMAT_XML,
],
],
'verbFilter' => [
'class' => VerbFilter::className(),
'actions' => $this->verbs(),
],
'authenticator' => [
'class' => CompositeAuth::className(),
],
'rateLimiter' => [
'class' => RateLimiter::className(),
],
];
}
首先是yii\filters\ContentNegotiator过滤器,该过滤器是用于内容协商的,
例如, 如果一个 RESTful API 请求中包含以下 header,
Accept: application/json; q=1.0, */*; q=0.1