Merge in object_split functionality
[catagits/Catalyst-Controller-DBIC-API.git] / lib / Catalyst / Controller / DBIC / API / REST.pm
CommitLineData
d2739840 1package Catalyst::Controller::DBIC::API::REST;
2
3#ABSTRACT: Provides a REST interface to DBIx::Class
4use Moose;
5BEGIN { extends 'Catalyst::Controller::DBIC::API'; }
6
7__PACKAGE__->config(
8 'default' => 'application/json',
9 'stash_key' => 'response',
10 'map' => {
11 'application/x-www-form-urlencoded' => 'JSON',
12 'application/json' => 'JSON',
13 });
14
15=head1 DESCRIPTION
16
17Provides a REST style API interface to the functionality described in L<Catalyst::Controller::DBIC::API>.
18
19By default provides the following endpoints:
20
609916e5 21 $base (operates on lists of objects and accepts GET, PUT, POST and DELETE)
22 $base/[identifier] (operates on a single object and accepts GET, PUT, POST and DELETE)
d2739840 23
24Where $base is the URI described by L</setup>, the chain root of the controller, and the request type will determine the L<Catalyst::Controller::DBIC::API> method to forward.
25
26=method_protected setup
27
28Chained: override
29PathPart: override
30CaptureArgs: 0
31
32As described in L<Catalyst::Controller::DBIC::API/setup>, this action is the chain root of the controller but has no pathpart or chain parent defined by default, so these must be defined in order for the controller to function. The neatest way is normally to define these using the controller's config.
33
34 __PACKAGE__->config
35 ( action => { setup => { PathPart => 'track', Chained => '/api/rest/rest_base' } },
36 ...
37 );
38
609916e5 39=method_protected no_id
d2739840 40
609916e5 41Chained: L</object_no_id>
d2739840 42PathPart: none
43CaptureArgs: 0
44
45Forwards to list level methods described in L<Catalyst::Controller::DBIC::API> as follows:
46
609916e5 47DELETE: L<Catalyst::Controller::DBIC::API/delete>
48POST/PUT: L<Catalyst::Controller::DBIC::API/update_or_create>
d2739840 49GET: forwards to L<Catalyst::Controller::DBIC::API/list>
50
51=cut
52
8cf0b66a 53sub no_id : Chained('object_no_id') PathPart('') ActionClass('REST') :CaptureArgs(0) {}
d2739840 54
8cf0b66a 55sub no_id_PUT
56{
d2739840 57 my ( $self, $c ) = @_;
d2739840 58 $c->forward('update_or_create');
59}
60
8cf0b66a 61sub no_id_POST
62{
d2739840 63 my ( $self, $c ) = @_;
d2739840 64 $c->forward('update_or_create');
65}
66
8cf0b66a 67sub no_id_DELETE
68{
d2739840 69 my ( $self, $c ) = @_;
d2739840 70 $c->forward('delete');
71}
72
8cf0b66a 73sub no_id_GET
74{
d2739840 75 my ( $self, $c ) = @_;
d2739840 76 $c->forward('list');
77}
78
609916e5 79=method_protected with_id
80
81Chained: L</object_with_id>
82PathPart: none
83CaptureArgs: 0
84
85Forwards to list level methods described in L<Catalyst::Controller::DBIC::API> as follows:
86
87DELETE: L<Catalyst::Controller::DBIC::API/delete>
88POST/PUT: L<Catalyst::Controller::DBIC::API/update_or_create>
89GET: forwards to L<Catalyst::Controller::DBIC::API/item>
90
91=cut
92
8cf0b66a 93sub with_id :Chained('object_with_id') :PathPart('') :ActionClass('REST') :CaptureArgs(0) {}
94
95sub with_id_PUT
96{
97 my ( $self, $c ) = @_;
98 $c->forward('update_or_create');
99}
100
101sub with_id_POST
102{
103 my ( $self, $c ) = @_;
104 $c->forward('update_or_create');
105}
106
107sub with_id_DELETE
108{
109 my ( $self, $c ) = @_;
110 $c->forward('delete');
111}
112
113sub with_id_GET
114{
115 my ( $self, $c ) = @_;
116 $c->forward('item');
117}
118
d2739840 1191;