.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Catalyst::Action::REST 3pm" .TH Catalyst::Action::REST 3pm "2022-06-09" "perl v5.34.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Catalyst::Action::REST \- Automated REST Method Dispatching .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& sub foo :Local :ActionClass(\*(AqREST\*(Aq) { \& ... do setup for HTTP method specific handlers ... \& } \& \& sub foo_GET { \& ... do something for GET requests ... \& } \& \& # alternatively use an Action \& sub foo_PUT : Action { \& ... do something for PUT requests ... \& } .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This Action handles doing automatic method dispatching for \s-1REST\s0 requests. It takes a normal Catalyst action, and changes the dispatch to append an underscore and method name. First it will try dispatching to an action with the generated name, and failing that it will try to dispatch to a regular method. .PP For example, in the synopsis above, calling \s-1GET\s0 on \*(L"/foo\*(R" would result in the foo_GET method being dispatched. .PP If a method is requested that is not implemented, this action will return a status 405 (Method Not Found). It will populate the \*(L"Allow\*(R" header with the list of implemented request methods. You can override this behavior by implementing a custom 405 handler like so: .PP .Vb 3 \& sub foo_not_implemented { \& ... handle not implemented methods ... \& } .Ve .PP If you do not provide an _OPTIONS subroutine, we will automatically respond with a 200 \s-1OK.\s0 The \*(L"Allow\*(R" header will be populated with the list of implemented request methods. If you do not provide an _HEAD either, we will auto dispatch to the _GET one in case it exists. .PP It is likely that you really want to look at Catalyst::Controller::REST, which brings this class together with automatic Serialization of requests and responses. .PP When you use this module, it adds the Catalyst::TraitFor::Request::REST role to your request class. .SH "METHODS" .IX Header "METHODS" .IP "dispatch" 4 .IX Item "dispatch" This method overrides the default dispatch mechanism to the re-dispatching mechanism described above. .SH "SEE ALSO" .IX Header "SEE ALSO" You likely want to look at Catalyst::Controller::REST, which implements a sensible set of defaults for a controller doing \s-1REST.\s0 .PP This class automatically adds the Catalyst::TraitFor::Request::REST role to your request class. If you're writing a web application which provides RESTful responses and still needs to accommodate web browsers, you may prefer to use Catalyst::TraitFor::Request::REST::ForBrowsers instead. .PP Catalyst::Action::Serialize, Catalyst::Action::Deserialize .SH "TROUBLESHOOTING" .IX Header "TROUBLESHOOTING" .ie n .IP "Q: I'm getting a ""415 Unsupported Media Type"" error. What gives?!" 4 .el .IP "Q: I'm getting a ``415 Unsupported Media Type'' error. What gives?!" 4 .IX Item "Q: I'm getting a 415 Unsupported Media Type error. What gives?!" A: Most likely, you haven't set Content-type equal to \*(L"application/json\*(R", or one of the accepted return formats. You can do this by setting it in your query accepted return formats. You can do this by setting it in your query string thusly: \f(CW\*(C`?content\-type=application%2Fjson (where %2F == / uri escaped).\*(C'\fR .Sp \&\fB\s-1NOTE\s0\fR Apache will refuse \f(CW%2F\fR unless configured otherwise. Make sure \f(CW\*(C`AllowEncodedSlashes On\*(C'\fR is in your httpd.conf file in order for this to run smoothly. .SH "AUTHOR" .IX Header "AUTHOR" Adam Jacob , with lots of help from mst and jrockway .PP Marchex, Inc. paid me while I developed this module. () .SH "CONTRIBUTORS" .IX Header "CONTRIBUTORS" Tomas Doran (t0m) .PP John Goulah .PP Christopher Laco .PP Daisuke Maki .PP Hans Dieter Pearcey .PP Brian Phillips .PP Dave Rolsky .PP Luke Saunders .PP Arthur Axel \*(L"fREW\*(R" Schmidt .PP J. Shirley .PP Gavin Henry .PP Gerv http://www.gerv.net/ .PP Colin Newell .PP Wallace Reis .PP André Walker (andrewalker) .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 2006\-2015 the above named \s-1AUTHOR\s0 and \s-1CONTRIBUTORS\s0 .SH "LICENSE" .IX Header "LICENSE" You may distribute this code under the same terms as Perl itself.