<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect3 id="zend.controller.router.routes.rest">
    <title>Zend_Rest_Route</title>

    <para>
        Le composant <classname>Zend_Rest</classname> contient une route RESTful pour
        <classname>Zend_Controller_Router_Rewrite</classname>. Cette route permet un
        schéma de routage fonction de la méthode <acronym>HTTP</acronym> et de
        l'<acronym>URI</acronym> afin d'y faire correspondre un module, contrôleur,
        et action. Le tableau suivant vous donne un aperçu du schéma de routage en
         fonction de l'<acronym>URI</acronym>.
    </para>

    <table frame="all">
        <title>Comportement de Zend_Rest_Route</title>

        <tgroup cols='3' align='left' colsep='1' rowsep='1'>
            <colspec colname='method' />
            <colspec colname='URI' />
            <colspec colname='route' />
            <thead>
                <row>
                    <entry>Méthode</entry>
                    <entry><acronym>URI</acronym></entry>
                    <entry>Module_Controller::action</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry><constant>GET</constant></entry>
                    <entry><filename>/product/ratings/</filename></entry>
                    <entry><methodname>Product_RatingsController::indexAction()</methodname></entry>
                </row>
                <row>
                    <entry><constant>GET</constant></entry>
                    <entry><filename>/product/ratings/:id</filename></entry>
                    <entry><methodname>Product_RatingsController::getAction()</methodname></entry>
                </row>
                <row>
                    <entry><constant>POST</constant></entry>
                    <entry><filename>/product/ratings</filename></entry>
                    <entry><methodname>Product_RatingsController::postAction()</methodname></entry>
                </row>
                <row>
                    <entry><constant>PUT</constant></entry>
                    <entry><filename>/product/ratings/:id</filename></entry>
                    <entry><methodname>Product_RatingsController::putAction()</methodname></entry>
                </row>
                <row>
                    <entry><constant>DELETE</constant></entry>
                    <entry><filename>/product/ratings/:id</filename></entry>
                    <entry>
                        <methodname>Product_RatingsController::deleteAction()</methodname>
                    </entry>
                </row>
                <row>
                    <entry><constant>POST</constant></entry>
                    <entry><filename>/product/ratings/:id?_method=PUT</filename></entry>
                    <entry><methodname>Product_RatingsController::putAction()</methodname></entry>
                </row>
                <row>
                    <entry><constant>POST</constant></entry>
                    <entry><filename>/product/ratings/:id?_method=DELETE</filename></entry>
                    <entry>
                        <methodname>Product_RatingsController::deleteAction()</methodname>
                    </entry>
                </row>
            </tbody>
        </tgroup>
    </table>

    <sect4 id="zend.rest.route_usage">
        <title>Utilisation de Zend_Rest_Route</title>

        <para>
            Pour activer <classname>Zend_Rest_Route</classname> pour une application entière,
            construisez en un objet sans paramètre spécifique et ajoutez le comme route par défaut dans
            le contrôleur frontal:
        </para>

        <programlisting language="php"><![CDATA[
$front     = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($front);
$front->getRouter()->addRoute('default', $restRoute);
]]></programlisting>

        <note>
            <para>
                Si <classname>Zend_Rest_Route</classname> ne trouve aucun module, contrôleur, action
                valides, il retournera <constant>FALSE</constant> et la route suivante sera alors
                analysée par le routeur.
            </para>
        </note>

        <para>
            Pour activer <classname>Zend_Rest_Route</classname> pour des modules spécifiques,
            construisez l'objet avec comme troisième paramètre, un tableau de noms de modules&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$front     = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($front, array(), array('product'));
$front->getRouter()->addRoute('rest', $restRoute);
]]></programlisting>

        <para>
            Pour activer <classname>Zend_Rest_Route</classname> pour des contrôleurs spécifiques,
            construisez l'objet avec comme troisième paramètre, un tableau de noms de contrôleurs
            en correspondance avec des noms de modules.
        </para>

        <programlisting language="php"><![CDATA[
$front     = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($front, array(), array(
    'product' => array('ratings')
));
$front->getRouter()->addRoute('rest', $restRoute);
]]></programlisting>
    </sect4>

    <sect4 id="zend.rest.route_config">
        <title>Zend_Rest_Route avec Zend_Config_Ini</title>

        <para>
            To use Zend_Rest_Route from an INI config file, use a route type
            parameter and set the config options:
        </para>

        <programlisting language="ini"><![CDATA[
routes.rest.type = Zend_Rest_Route
routes.rest.defaults.controller = object
routes.rest.mod = project,user
]]></programlisting>

        <para>
            The 'type' option designates the RESTful routing config type.
            The 'defaults' option is used to specify custom default
            module, controller, and/or actions for the route. All other options
            in the config group are treated as RESTful module names, and their
            values are RESTful controller names. The example config defines
            Mod_ProjectController and Mod_UserController as RESTful controllers.
        </para>

        <para>Then use the addConfig() method of the Rewrite router object:</para>

        <programlisting language="php"><![CDATA[
$config = new Zend_Config_Ini('path/to/routes.ini');
$router = new Zend_Controller_Router_Rewrite();
$router->addConfig($config, 'routes');
]]></programlisting>
    </sect4>

    <sect4 id="zend.rest.controller">
        <title>Zend_Rest_Controller</title>

        <para>
            Pour vous aidez à utiliser des contrôleurs avec
            <classname>Zend_Rest_Route</classname>, faites les étendre
            <classname>Zend_Rest_Controller</classname>.
            <classname>Zend_Rest_Controller</classname> définit les 5 opérations RESTful les
            plus connues sous forme de méthodes abstraites.
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><methodname>indexAction()</methodname></emphasis> -
                    Devrait récupérer un index des ressources et le passer à la vue.
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>getAction()</methodname></emphasis> -
                    Devrait récupérer des données d'une ressource définie par <acronym>URI</acronym>
                    et les passer à la vue.
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>postAction()</methodname></emphasis> -
                    Devrait accepter une nouvelle ressource et la faire persister (la sauvegarder).
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>putAction()</methodname></emphasis> -
                    Devrait accepter une ressource indentifiée par <acronym>URI</acronym> et
                    la faire persister (la sauvegarder).
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>deleteAction()</methodname></emphasis> -
                    Devrait supprimer la ressource identifiée par <acronym>URI</acronym>.
                </para>
            </listitem>
        </itemizedlist>
    </sect4>
</sect3>
