Commit | Line | Data |
01f9819a |
1 | NAME |
63d41fcd |
2 | Catalyst::Action::REST - Automated REST Method Dispatching |
84e2464c |
3 | |
01f9819a |
4 | SYNOPSIS |
63d41fcd |
5 | sub foo :Local :ActionClass('REST') { |
6 | ... do setup for HTTP method specific handlers ... |
7 | } |
01f9819a |
8 | |
63d41fcd |
9 | sub foo_GET { |
10 | ... do something for GET requests ... |
01f9819a |
11 | } |
12 | |
63d41fcd |
13 | # alternatively use an Action |
14 | sub foo_PUT : Action { |
15 | ... do something for PUT requests ... |
01f9819a |
16 | } |
17 | |
18 | DESCRIPTION |
63d41fcd |
19 | This Action handles doing automatic method dispatching for REST |
20 | requests. It takes a normal Catalyst action, and changes the dispatch to |
21 | append an underscore and method name. First it will try dispatching to |
22 | an action with the generated name, and failing that it will try to |
23 | dispatch to a regular method. |
01f9819a |
24 | |
63d41fcd |
25 | For example, in the synopsis above, calling GET on "/foo" would result |
26 | in the foo_GET method being dispatched. |
8f00a41b |
27 | |
63d41fcd |
28 | If a method is requested that is not implemented, this action will |
29 | return a status 405 (Method Not Found). It will populate the "Allow" |
30 | header with the list of implemented request methods. You can override |
31 | this behavior by implementing a custom 405 handler like so: |
8f00a41b |
32 | |
63d41fcd |
33 | sub foo_not_implemented { |
34 | ... handle not implemented methods ... |
35 | } |
8f00a41b |
36 | |
63d41fcd |
37 | If you do not provide an _OPTIONS subroutine, we will automatically |
38 | respond with a 200 OK. The "Allow" header will be populated with the |
39 | list of implemented request methods. |
fec618b0 |
40 | |
63d41fcd |
41 | It is likely that you really want to look at Catalyst::Controller::REST, |
42 | which brings this class together with automatic Serialization of |
43 | requests and responses. |
fec618b0 |
44 | |
4ac3b2f4 |
45 | When you use this module, it adds the Catalyst::TraitFor::Request::REST |
46 | role to your request class. |
8f00a41b |
47 | |
63d41fcd |
48 | METHODS |
49 | dispatch |
50 | This method overrides the default dispatch mechanism to the |
51 | re-dispatching mechanism described above. |
8f00a41b |
52 | |
63d41fcd |
53 | SEE ALSO |
54 | You likely want to look at Catalyst::Controller::REST, which implements |
55 | a sensible set of defaults for a controller doing REST. |
8f00a41b |
56 | |
4ac3b2f4 |
57 | This class automatically adds the Catalyst::TraitFor::Request::REST role |
58 | to your request class. If you're writing a webapp which provides RESTful |
3bb36dca |
59 | responses and still needs to accommodate web browsers, you may prefer to |
4ac3b2f4 |
60 | use Catalyst::TraitFor::Request::REST::ForBrowsers instead. |
61 | |
63d41fcd |
62 | Catalyst::Action::Serialize, Catalyst::Action::Deserialize |
8f00a41b |
63 | |
63d41fcd |
64 | TROUBLESHOOTING |
65 | Q: I'm getting a "415 Unsupported Media Type" error. What gives?! |
66 | A: Most likely, you haven't set Content-type equal to |
67 | "application/json", or one of the accepted return formats. You can |
68 | do this by setting it in your query accepted return formats. You can |
69 | do this by setting it in your query string thusly: |
70 | "?content-type=application%2Fjson (where %2F == / uri escaped)." |
8f00a41b |
71 | |
63d41fcd |
72 | NOTE Apache will refuse %2F unless configured otherwise. Make sure |
73 | "AllowEncodedSlashes On" is in your httpd.conf file in order for |
74 | this to run smoothly. |
8f00a41b |
75 | |
63d41fcd |
76 | AUTHOR |
77 | Adam Jacob <adam@stalecoffee.org>, with lots of help from mst and |
78 | jrockway |
8f00a41b |
79 | |
63d41fcd |
80 | Marchex, Inc. paid me while I developed this module. |
81 | (<http://www.marchex.com>) |
8f00a41b |
82 | |
63d41fcd |
83 | CONTRIBUTORS |
3bb36dca |
84 | Tomas Doran (t0m) <bobtfish@bobtfish.net> |
85 | |
86 | John Goulah |
8f00a41b |
87 | |
63d41fcd |
88 | Christopher Laco |
8f00a41b |
89 | |
3bb36dca |
90 | Daisuke Maki <daisuke@endeworks.jp> |
01f9819a |
91 | |
3bb36dca |
92 | Hans Dieter Pearcey |
01f9819a |
93 | |
3bb36dca |
94 | Dave Rolsky <autarch@urth.org> |
01f9819a |
95 | |
3bb36dca |
96 | Luke Saunders |
01f9819a |
97 | |
3bb36dca |
98 | Arthur Axel "fREW" Schmidt <frioux@gmail.com> |
01f9819a |
99 | |
3bb36dca |
100 | J. Shirley <jshirley@gmail.com> |
01f9819a |
101 | |
63d41fcd |
102 | COPYRIGHT |
103 | Copyright the above named AUTHOR and CONTRIBUTORS |
01f9819a |
104 | |
105 | LICENSE |
63d41fcd |
106 | You may distribute this code under the same terms as Perl itself. |
01f9819a |
107 | |