# Zend_Rest_Route

The `Zend_Rest` component contains a RESTful route for `Zend_Controller_Router_Rewrite`. This route offers a standardized routing scheme that routes requests by translating the HTTP method and the URI to a module, controller, and action. The table below provides an overview of how request methods and URI's are routed.

## Zend_Rest_Route Behavior

Method | URI | Module_Controller::action
--- | --- | ---
GET | `/product/ratings/` | `Product_RatingsController::indexAction()`
GET | `/product/ratings/:id` | `Product_RatingsController::getAction()`
POST | `/product/ratings` | `Product_RatingsController::postAction()`
PUT | `/product/ratings/:id` | `Product_RatingsController::putAction()`
DELETE | `/product/ratings/:id` | `Product_RatingsController::deleteAction()`
POST | `/product/ratings/:id?_method="PUT"` | `Product_RatingsController::putAction()`
POST | `/product/ratings/:id?_method="DELETE"` | `Product_RatingsController::deleteAction()`

To enable `Zend_Rest_Route` for an entire application, construct it with no config params and add it as the default route on the front controller:

    $front     = Zend_Controller_Front::getInstance();
    $restRoute = new Zend_Rest_Route($front);
    $front->getRouter()->addRoute('default', $restRoute);

If `Zend_Rest_Route` cannot match a valid module, controller, or action, it will return `FALSE` and the router will attempt to match using the next route in the router.

To enable `Zend_Rest_Route` for specific modules, construct it with an array of module names as the 3rd constructor argument:

    $front     = Zend_Controller_Front::getInstance();
    $restRoute = new Zend_Rest_Route($front, array(), array('product'));
    $front->getRouter()->addRoute('rest', $restRoute);

To enable `Zend_Rest_Route` for specific controllers, add an array of controller names as the value of each module array element.

    $front     = Zend_Controller_Front::getInstance();
    $restRoute = new Zend_Rest_Route($front, array(), array(
        'product' => array('ratings')
    ));
    $front->getRouter()->addRoute('rest', $restRoute);

## Zend_Rest_Controller

To help or guide development of Controllers for use with `Zend_Rest_Route`, extend your Controllers from `Zend_Rest_Controller`. `Zend_Rest_Controller` defines the 5 most-commonly needed operations for RESTful resources in the form of abstract action methods.

- `indexAction()` - Should retrieve an index of resources and assign it to view.

- `getAction()` - Should retrieve a single resource identified by URI and assign it to view.

- `postAction()` - Should accept a new single resource and persist its state.

- `putAction()` - Should accept a single resource idenitifed by URI and persist its state.

- `deleteAction()` - Should delete a single resource identified by URI.