With resource and controller classes ready, you can access the resources using the URL like
http://localhost/index.php?r=user/create, similar to what you can do with normal Web applications.
In practice, you usually want to enable pretty URLs and take advantage of HTTP verbs.
For example, a request
POST /users would mean accessing the
This can be done easily by configuring the
urlManager application component
in the application configuration like the following:
'urlManager' => [ 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ ['class' => 'yii\rest\UrlRule', 'controller' => 'user'], ], ]
Compared to the URL management for Web applications, the main new thing above is the use of yii\rest\UrlRule for routing RESTful API requests. This special URL rule class will create a whole set of child URL rules to support routing and URL creation for the specified controller(s). For example, the above code is roughly equivalent to the following rules:
[ 'PUT,PATCH users/<id>' => 'user/update', 'DELETE users/<id>' => 'user/delete', 'GET,HEAD users/<id>' => 'user/view', 'POST users' => 'user/create', 'GET,HEAD users' => 'user/index', 'users/<id>' => 'user/options', 'users' => 'user/options', ]
And the following API endpoints are supported by this rule:
GET /users: list all users page by page;
HEAD /users: show the overview information of user listing;
POST /users: create a new user;
GET /users/123: return the details of the user 123;
HEAD /users/123: show the overview information of user 123;
PUT /users/123: update the user 123;
DELETE /users/123: delete the user 123;
OPTIONS /users: show the supported verbs regarding endpoint
OPTIONS /users/123: show the supported verbs regarding endpoint
You may configure the
except options to explicitly list which actions to support or which
actions should be disabled, respectively. For example,
[ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'except' => ['delete', 'create', 'update'], ],
You may also configure
extraPatterns to redefine existing patterns or add new patterns supported by this rule.
For example, to support a new action
search by the endpoint
GET /users/search, configure the
extraPatterns option as follows,
[ 'class' => 'yii\rest\UrlRule', 'controller' => 'user', 'extraPatterns' => [ 'GET search' => 'search', ], ]
You may have noticed that the controller ID
user appears in plural form as
users in the endpoint URLs.
This is because yii\rest\UrlRule automatically pluralizes controller IDs when creating child URL rules.
You may disable this behavior by setting yii\rest\UrlRule::$pluralize to be
Info: The pluralization of controller IDs is done by yii\helpers\Inflector::pluralize(). The method respects special pluralization rules. For example, the word
boxwill be pluralized as
In case when the automatic pluralization does not meet your requirement, you may also configure the
yii\rest\UrlRule::$controller property to explicitly specify how to map a name used in endpoint URLs to
a controller ID. For example, the following code maps the name
u to the controller ID
[ 'class' => 'yii\rest\UrlRule', 'controller' => ['u' => 'user'], ]
Extra configuration for contained rules ¶
It could be useful to specify extra configuration that is applied to each rule contained within yii\rest\UrlRule.
A good example would be specifying defaults for
[ 'class' => 'yii\rest\UrlRule', 'controller' => ['user'], 'ruleConfig' => [ 'class' => 'yii\web\UrlRule', 'defaults' => [ 'expand' => 'profile', ] ], ],