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

    <para>
        Die Komponente <classname>Zend_Rest</classname> enthält eine RESTvolle Route für
        <classname>Zend_Controller_Router_Rewrite</classname>. Diese Route bietet ein
        standartisiertes Routing Schema das Routinganfragen durch Übersetzung der
        <acronym>HTTP</acronym> Methode und der <acronym>URI</acronym> zu einem Modul,
        Controller und einer Action. Die unten stehende Tabelle bietet eine Übersicht darüber
        wie Anfragemethoden und <acronym>URI</acronym>'s geroutet werden.
    </para>

    <table frame="all">
        <title>Verhalten von 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>Methode</entry>
                    <entry><acronym>URI</acronym></entry>
                    <entry>Module_Controller::action</entry>
                </row>
            </thead>
            <tbody>
                <row>
                    <entry>GET</entry>
                    <entry><filename>/product/ratings/</filename></entry>
                    <entry><methodname>Product_RatingsController::indexAction()</methodname></entry>
                </row>
                <row>
                    <entry>GET</entry>
                    <entry><filename>/product/ratings/:id</filename></entry>
                    <entry><methodname>Product_RatingsController::getAction()</methodname></entry>
                </row>
                <row>
                    <entry>POST</entry>
                    <entry><filename>/product/ratings</filename></entry>
                    <entry><methodname>Product_RatingsController::postAction()</methodname></entry>
                </row>
                <row>
                    <entry>PUT</entry>
                    <entry><filename>/product/ratings/:id</filename></entry>
                    <entry><methodname>Product_RatingsController::putAction()</methodname></entry>
                </row>
                <row>
                    <entry>DELETE</entry>
                    <entry><filename>/product/ratings/:id</filename></entry>
                    <entry>
                        <methodname>Product_RatingsController::deleteAction()</methodname>
                    </entry>
                </row>
                <row>
                    <entry>POST</entry>
                    <entry><command>/product/ratings/:id?_method="PUT"</command></entry>
                    <entry><methodname>Product_RatingsController::putAction()</methodname></entry>
                </row>
                <row>
                    <entry>POST</entry>
                    <entry><command>/product/ratings/:id?_method="DELETE"</command></entry>
                    <entry>
                        <methodname>Product_RatingsController::deleteAction()</methodname>
                    </entry>
                </row>
            </tbody>
        </tgroup>
    </table>

    <para>
        Um <classname>Zend_Rest_Route</classname> für eine komplette Anwendung einzuschalten muss
        diese ohne Konfigurationsparameter erstellt und als Standardroute dem
        Frontcontroller hinzugefügt werden:
    </para>

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

    <note>
        <para>
            Wenn <classname>Zend_Rest_Route</classname> keinem gültigen Modul, Controller oder
            keiner Action entspricht gibt diese <constant>FALSE</constant> zurück und der Router
            versucht eine Entsprechung zu finden indem die nächste Route im Router verwendet wird.
        </para>
    </note>

    <para>
        Um <classname>Zend_Rest_Route</classname> für spezielle Module einzuschalten muss diese
        mit einem Array von Modulnamen als 3tes Argument des Constructors erstellt werden:
    </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>
        Um <classname>Zend_Rest_Route</classname> für spezielle Controller einzuschalten muss ein
        Array von Controllernamen als Wert für jedes Modul (Arrayelement) hinzugefügt werden.
    </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 id="zend.rest.controller">
        <title>Zend_Rest_Controller</title>

        <para>
            Um bei der Entwicklung von Controllern zu Hilfe zu sein die mit
            <classname>Zend_Rest_Route</classname> verwendet werden, müssen die Controller von
            <classname>Zend_Rest_Controller</classname> erweitert werden.
            <classname>Zend_Rest_Controller</classname> definiert die 5 am meisten benötigten
            Operationen für RESTvolle Ressourcen in der Form von abstrakten Actionmethoden.
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><methodname>indexAction()</methodname></emphasis> -
                    Sollte einen Index von Ressourcen empfangen und diese mit der View
                    verknüpfen.
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>getAction()</methodname></emphasis> -
                    Sollte eine einzelne  Ressource empfangen die von einer <acronym>URI</acronym>
                    identifiziert wird und diese mit der Vew verknüpfen.
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>postAction()</methodname></emphasis> -
                    Sollte eine einzelne neue Ressource akzeptieren und dessen Status persistent
                    machen.
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>putAction()</methodname></emphasis> -
                    Sollte eine einzelne Ressource akzeptieren die von einer <acronym>URI</acronym>
                    identifiziert wird und dessen Status persistent machen.
                </para>
            </listitem>
            <listitem>
                <para>
                    <emphasis><methodname>deleteAction()</methodname></emphasis> -
                    Sollte eine einzelne Ressource löschen die von einer <acronym>URI</acronym>
                    identifiziert wird.
                </para>
            </listitem>
        </itemizedlist>

    </sect4>
</sect3>
<!--
vim:se ts=4 sw=4 et:
-->
