Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / Catalyst::TraitFor::Request::REST::ForBrowsers.3pm
CommitLineData
3fea05b9 1.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.10)
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sp \" Vertical space (when we can't use .PP)
6.if t .sp .5v
7.if n .sp
8..
9.de Vb \" Begin verbatim text
10.ft CW
11.nf
12.ne \\$1
13..
14.de Ve \" End verbatim text
15.ft R
16.fi
17..
18.\" Set up some character translations and predefined strings. \*(-- will
19.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20.\" double quote, and \*(R" will give a right double quote. \*(C+ will
21.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
22.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
23.\" nothing in troff, for use with C<>.
24.tr \(*W-
25.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26.ie n \{\
27. ds -- \(*W-
28. ds PI pi
29. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
31. ds L" ""
32. ds R" ""
33. ds C` ""
34. ds C' ""
35'br\}
36.el\{\
37. ds -- \|\(em\|
38. ds PI \(*p
39. ds L" ``
40. ds R" ''
41'br\}
42.\"
43.\" Escape single quotes in literal strings from groff's Unicode transform.
44.ie \n(.g .ds Aq \(aq
45.el .ds Aq '
46.\"
47.\" If the F register is turned on, we'll generate index entries on stderr for
48.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49.\" entries marked with X<> in POD. Of course, you'll have to process the
50.\" output yourself in some meaningful fashion.
51.ie \nF \{\
52. de IX
53. tm Index:\\$1\t\\n%\t"\\$2"
54..
55. nr % 0
56. rr F
57.\}
58.el \{\
59. de IX
60..
61.\}
62.\"
63.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64.\" Fear. Run. Save yourself. No user-serviceable parts.
65. \" fudge factors for nroff and troff
66.if n \{\
67. ds #H 0
68. ds #V .8m
69. ds #F .3m
70. ds #[ \f1
71. ds #] \fP
72.\}
73.if t \{\
74. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75. ds #V .6m
76. ds #F 0
77. ds #[ \&
78. ds #] \&
79.\}
80. \" simple accents for nroff and troff
81.if n \{\
82. ds ' \&
83. ds ` \&
84. ds ^ \&
85. ds , \&
86. ds ~ ~
87. ds /
88.\}
89.if t \{\
90. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96.\}
97. \" troff and (daisy-wheel) nroff accents
98.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105.ds ae a\h'-(\w'a'u*4/10)'e
106.ds Ae A\h'-(\w'A'u*4/10)'E
107. \" corrections for vroff
108.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110. \" for low resolution devices (crt and lpr)
111.if \n(.H>23 .if \n(.V>19 \
112\{\
113. ds : e
114. ds 8 ss
115. ds o a
116. ds d- d\h'-1'\(ga
117. ds D- D\h'-1'\(hy
118. ds th \o'bp'
119. ds Th \o'LP'
120. ds ae ae
121. ds Ae AE
122.\}
123.rm #[ #] #H #V #F C
124.\" ========================================================================
125.\"
126.IX Title "Catalyst::TraitFor::Request::REST::ForBrowsers 3"
127.TH Catalyst::TraitFor::Request::REST::ForBrowsers 3 "2010-05-13" "perl v5.8.8" "User Contributed Perl Documentation"
128.\" For nroff, turn off justification. Always turn off hyphenation; it makes
129.\" way too many mistakes in technical documents.
130.if n .ad l
131.nh
132.SH "NAME"
133Catalyst::TraitFor::Request::REST::ForBrowsers \- A request trait for REST and browsers
134.SH "SYNOPSIS"
135.IX Header "SYNOPSIS"
136.Vb 3
137\& package MyApp;
138\& use Moose;
139\& use namespace::autoclean;
140\&
141\& use Catalyst;
142\& use CatalystX::RoleApplicator;
143\&
144\& extends \*(AqCatalyst\*(Aq;
145\&
146\& _\|_PACKAGE_\|_\->apply_request_class_roles(qw[
147\& Catalyst::TraitFor::Request::REST::ForBrowsers
148\& ]);
149.Ve
150.SH "DESCRIPTION"
151.IX Header "DESCRIPTION"
152Writing REST-y apps is a good thing, but if you're also trying to support web
153browsers, you're probably going to need some hackish workarounds. This module
154provides those workarounds for you.
155.PP
156Specifically, it lets you do two things. First, it lets you \*(L"tunnel\*(R" \s-1PUT\s0 and
157\&\s-1DELETE\s0 requests across a \s-1POST\s0, since most browsers do not support \s-1PUT\s0 or
158\&\s-1DELETE\s0 actions (as of early 2009, at least).
159.PP
160Second, it provides a heuristic to check if the client is a web browser,
161regardless of what content types it claims to accept. The reason for this is
162that while a browser might claim to accept the \*(L"application/xml\*(R" content type,
163it's really not going to do anything useful with it, and you're best off
164giving it \s-1HTML\s0.
165.SH "METHODS"
166.IX Header "METHODS"
167This class provides the following methods:
168.ie n .SS "$request\->method"
169.el .SS "\f(CW$request\fP\->method"
170.IX Subsection "$request->method"
171This method works just like \f(CW\*(C`Catalyst::Request\->method()\*(C'\fR except it
172allows for tunneling of \s-1PUT\s0 and \s-1DELETE\s0 requests via a \s-1POST\s0.
173.PP
174Specifically, you can provide a form element named \*(L"x\-tunneled-method\*(R" which
175can override the request method for a \s-1POST\s0. This \fIonly\fR works for a \s-1POST\s0, not
176a \s-1GET\s0.
177.PP
178You can also use a header named \*(L"x\-http-method-override\*(R" instead (Google uses
179this header for its APIs).
180.ie n .SS "$request\->looks_like_browser"
181.el .SS "\f(CW$request\fP\->looks_like_browser"
182.IX Subsection "$request->looks_like_browser"
183This attribute provides a heuristic to determine whether or not the request
184\&\fIappears\fR to come from a browser. You can use this however you want. I
185usually use it to determine whether or not to give the client a full \s-1HTML\s0 page
186or some sort of serialized data.
187.PP
188This is a heuristic, and like any heuristic, it is probably wrong
189sometimes. Here is how it works:
190.IP "\(bu" 4
191If the request includes a header \*(L"X\-Request-With\*(R" set to either \*(L"\s-1HTTP\s0.Request\*(R"
192or \*(L"XMLHttpRequest\*(R", this returns false. The assumption is that if you're
193doing \s-1XHR\s0, you don't want the request treated as if it comes from a browser.
194.IP "\(bu" 4
195If the client makes a \s-1GET\s0 request with a query string parameter
196\&\*(L"content-type\*(R", and that type is \fInot\fR an \s-1HTML\s0 type, it is \fInot\fR a browser.
197.IP "\(bu" 4
198If the client provides an Accept header which includes \*(L"*/*\*(R" as an accepted
199content type, the client is a browser. Specifically, it is \s-1IE7\s0, which submits
200an Accept header of \*(L"*/*\*(R". \s-1IE7\s0's Accept header does not include any html types
201like \*(L"text/html\*(R".
202.IP "\(bu" 4
203If the client provides an Accept header and accepts either \*(L"text/html\*(R" or
204\&\*(L"application/xhtml+xml\*(R" it is a browser.
205.IP "\(bu" 4
206If it provides an Accept header of any sort, it is \fInot\fR a browser.
207.IP "\(bu" 4
208The default is that the client is a browser.
209.PP
210This all works well for my apps, but read it carefully to make sure it meets
211your expectations before using it.
212.SH "AUTHOR"
213.IX Header "AUTHOR"
214Dave Rolsky, \f(CW\*(C`<autarch@urth.org>\*(C'\fR
215.SH "BUGS"
216.IX Header "BUGS"
217Please report any bugs or feature requests to
218\&\f(CW\*(C`bug\-catalyst\-action\-rest@rt.cpan.org\*(C'\fR, or through the web interface at
219<http://rt.cpan.org>. We will be notified, and then you'll automatically be
220notified of progress on your bug as I make changes.
221.SH "COPYRIGHT & LICENSE"
222.IX Header "COPYRIGHT & LICENSE"
223Copyright 2008\-2010 Dave Rolsky, All Rights Reserved.
224.PP
225This program is free software; you can redistribute it and/or modify it under
226the same terms as Perl itself.