NAME

   Mojolicious::Plugin::REST - Mojolicious Plugin for RESTful operations

VERSION

   version 0.005

SYNOPSIS

       # In Mojolicious application
       $self->plugin( 'REST', { prefix => 'api', version => 'v1', } );

       $self->routes->rest_routes( name => 'Account' );

       # Installs following routes:
       # +-------------+-----------------------------+-------------------------+
       # | HTTP Method |             URL             |          Route          |
       # +-------------+-----------------------------+-------------------------+
       # | GET         | /api/v1/accounts            | Account::list_accounts  |
       # | POST        | /api/v1/accounts            | Account::create_account |
       # | GET         | /api/v1/accounts/:accountId | Account::read_account   |
       # | PUT         | /api/v1/accounts/:accountId | Account::update_account |
       # | DELETE      | /api/v1/accounts/:accountId | Account::delete_account |
       # +-------------+-----------------------------+-------------------------+

       $routes->rest_routes( name => 'Feature', under => 'Account' );

       # Installs following routes:
       # +-------------+-------------------------------------------------+---------------------------------+
       # | HTTP Method |                       URL                       |              Route              |
       # +-------------+-------------------------------------------------+---------------------------------+
       # | GET         | /api/v1/accounts/:accountId/features            | Feature::list_account_features  |
       # | POST        | /api/v1/accounts/:accountId/features            | Feature::create_account_feature |
       # | GET         | /api/v1/accounts/:accountId/features/:featureId | Feature::read_account_feature   |
       # | PUT         | /api/v1/accounts/:accountId/features/:featureId | Feature::update_account_feature |
       # | DELETE      | /api/v1/accounts/:accountId/features/:featureId | Feature::delete_account_feature |
       # +-------------+-------------------------------------------------+---------------------------------+

       $routes->rest_routes( name => 'Product', under => 'Account', types => [qw(FTP SSH)] );

       # Installs following routes:
       # +-------------+------------------------------------------+--------------------------------------+
       # | HTTP Method |                   URL                    |                Route                 |
       # +-------------+------------------------------------------+--------------------------------------+
       # | GET         | /api/v1/accounts/:accountId/products     | Product::list_account_products       |
       # | POST        | /api/v1/accounts/:accountId/products     | Product::create_account_product      |
       # | GET         | /api/v1/accounts/:accountId/products/FTP | Product::FTP::read_account_product   |
       # | PUT         | /api/v1/accounts/:accountId/products/FTP | Product::FTP::update_account_product |
       # | DELETE      | /api/v1/accounts/:accountId/products/FTP | Product::FTP::delete_account_product |
       # | GET         | /api/v1/accounts/:accountId/products/SSH | Product::SSH::read_account_product   |
       # | PUT         | /api/v1/accounts/:accountId/products/SSH | Product::SSH::update_account_product |
       # | DELETE      | /api/v1/accounts/:accountId/products/SSH | Product::SSH::delete_account_product |
       # +-------------+------------------------------------------+--------------------------------------+

DESCRIPTION

   Mojolicious::Plugin::REST adds various helpers for REST
   <http://en.wikipedia.org/wiki/Representational_state_transfer>ful CRUD
   <http://en.wikipedia.org/wiki/Create,_read,_update_and_delete>
   operations via HTTP
   <http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol> to the app.

   As much as possible, it tries to follow RESTful API Design
   <https://blog.apigee.com/detail/restful_api_design> principles from
   Apigee.

   Used in conjuction with Mojolicious::Controller::REST, this module
   makes building RESTful application a breeze.

   This module is inspired from Mojolicious::Plugin::RESTRoutes.

MOJOLICIOUS HELPERS

rest_routes

   A routes shourtcut to easily add RESTful routes for a resource.

MOJOLICIOUS HOOKS

   This module installs an before_render application hook, which gurantees
   JSON output. Refer Mojolicious::Controller::REST documentation for
   output format.

OPTIONS

   Following options can be used to control route creation:

   name

     The name of the resource, e.g. 'User'. This name will be used to
     build the route URL as well as the controller name.

   readonly

     If true, no create, update or delete routes will be created.

   controller

     By default, resource name will be converted to CamelCase controller
     name. You can change it by providing controller name.

     If customized, this option needs a full namespace of the controller
     class.

   under

     This option can be used for associations.

   types

     This option can be used to specify types of resources available in
     application.

PLUGIN OPTIONS

   prefix

     If present, this option will be added before every route created.

   version

     If present, api version given will be added before every route
     created (but after prefix).

   http2crud

     If present, given HTTP to CRUD mapping will be used to determine
     method names. Default mapping:

         get     ->  read
         post    ->  create
         put     ->  update
         delete  ->  delete
         list    ->  list

AUTHOR

   Abhishek Shende <[email protected]>

CONTRIBUTOR

   Vincent HETRU <[email protected]>

COPYRIGHT AND LICENSE

   This software is copyright (c) 2014 by Abhishek Shende.

   This is free software; you can redistribute it and/or modify it under
   the same terms as the Perl 5 programming language system itself.