# Enrutamiento ¶

Con las clases de controlador y recurso preparadas, puedes acceder a los recursos usando una URL como `http://localhost/index.php?r=user/create`, parecida a la que usas con aplicaciones Web normales.

En la práctica, querrás usualmente usar URLs limpias y obtener ventajas de los verbos HTTP. Por ejemplo, una petición `POST /users` significaría acceder a la acción `user/create`. Esto puede realizarse fácilmente configurando el componente de la aplicación `urlManager` como sigue:

    'urlManager' => [
        'enablePrettyUrl' => true,
        'enableStrictParsing' => true,
        'showScriptName' => false,
        'rules' => [
            ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
        ],
    ]

En comparación con la gestión de URL en las aplicaciones Web, lo principalmente nuevo de lo anterior es el uso de yii\rest\UrlRule para el enrutamiento de las peticiones con el API RESTful. Esta clase especial de regla URL creará un conjunto completo de reglas URL hijas para soportar el enrutamiento y creación de URL para el/los controlador/es especificados. Por ejemplo, el código anterior es equivalente a las siguientes reglas:

    [
        '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',
    ]

Y los siguientes puntos finales del API son mantenidos por esta regla:

- `GET /users`: lista de todos los usuarios página a página;
- `HEAD /users`: muestra ĺa información resumen del usuario listado;
- `POST /users`: crea un nuevo usuario;
- `GET /users/123`: devuelve los detalles del usuario 123;
- `HEAD /users/123`: muestra la información resumen del usuario 123;
- `PATCH /users/123` y `PUT /users/123`: actualizan al usuario 123;
- `DELETE /users/123`: borra el usuario 123;
- `OPTIONS /users`: muestra los verbos soportados de acuerdo al punto final `/users`;
- `OPTIONS /users/123`: muestra los verbos soportados de acuerdo al punto final `/users/123`.

Puedes configurar las opciones `only` y `except` para explícitamente listar cuáles acciones soportar o cuáles deshabilitar, respectivamente. Por ejemplo,

    [
        'class' => 'yii\rest\UrlRule',
        'controller' => 'user',
        'except' => ['delete', 'create', 'update'],
    ],

También puedes configurar las propiedades `patterns` o `extraPatterns` para redefinir patrones existentes o añadir nuevos soportados por esta regla. Por ejemplo, para soportar una nueva acción `search` para el punto final `GET /users/search`, configura la opción `extraPatterns` como sigue,

    [
        'class' => 'yii\rest\UrlRule',
        'controller' => 'user',
        'extraPatterns' => [
            'GET search' => 'search',
        ],
    ]

Puedes haber notado que el ID del controlador `user` aparece en formato plural `users` en los puntos finales de las URLs. Esto se debe a que yii\rest\UrlRule automáticamente pluraliza los IDs de los controladores al crear reglas URL hijas. Puedes desactivar este comportamiento definiendo la propiedad yii\rest\UrlRule::$pluralize como `false`.

> Información: La pluralización de los IDs de los controladores es realizada por yii\helpers\Inflector::pluralize(). Este método respeta reglas especiales de pluralización. Por ejemplo, la palabra `box` (caja) será pluralizada como `boxes` en vez de `boxs`.

En caso de que la pluralización automática no encaje en tus requerimientos, puedes además configurar la propiedad yii\rest\UrlRule::$controller para especificar explícitamente cómo mapear un nombre utilizado en un punto final URL a un ID de controlador. Por ejemplo, el siguiente código mapea el nombre `u` al ID del controlador `user`.

    [
        'class' => 'yii\rest\UrlRule',
        'controller' => ['u' => 'user'],
    ]