<div dir="ltr">How about just saying that the input is either the string &quot;get&quot; &quot;put&quot; &quot;post&quot; or a match pattern and if it is one of the former, then do case-folding before checking?<div><br></div>
<div>Robby</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jan 7, 2013 at 9:24 AM, Jay McCarthy <span dir="ltr">&lt;<a href="mailto:jay@racket-lang.org" target="_blank">jay@racket-lang.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I like the idea of the match patterns... but I&#39;m worried about the details.<br>
<br>
The names are very common: get, post, head, etc. And I think exporting<br>
them as http-method-get or GET, etc would be hideous.<br>
<br>
Also, there is no exhaustive list of valid HTTP methods... anything<br>
can be used. And even the lisf of commonly used ones is long:<br>
<br>
<a href="http://annevankesteren.nl/2007/10/http-methods" target="_blank">http://annevankesteren.nl/2007/10/http-methods</a>  (as of 2007)<br>
<br>
Do you have any ideas for a solution to this?<br>
<span class="HOEnZb"><font color="#888888"><br>
Jay<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Fri, Jan 4, 2013 at 9:27 AM, Sam Tobin-Hochstadt &lt;<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a>&gt; wrote:<br>
&gt; Ah, that makes sense.  You could think about providing match patterns<br>
&gt; for each of the HTTP methods, in that case -- people might be less<br>
&gt; confused by that than strings.<br>
&gt;<br>
&gt; On Fri, Jan 4, 2013 at 10:30 AM, Jay McCarthy &lt;<a href="mailto:jay@racket-lang.org">jay@racket-lang.org</a>&gt; wrote:<br>
&gt;&gt; The programmer&#39;s input is not a string. It is a match pattern, so you can<br>
&gt;&gt; use &#39;or&#39;, &#39;_&#39;, etc.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Fri, Jan 4, 2013 at 6:30 AM, Sam Tobin-Hochstadt &lt;<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Why not normalize this at the other end (ie, normalize the provided<br>
&gt;&gt;&gt; string as well as the actual method) so that &quot;GET&quot; as well as &quot;get&quot;<br>
&gt;&gt;&gt; will work?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Sam<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Fri, Jan 4, 2013 at 7:45 AM,  &lt;<a href="mailto:jay@racket-lang.org">jay@racket-lang.org</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt; jay has updated `master&#39; from aa5f2e7875 to c07ff948ee.<br>
&gt;&gt;&gt; &gt;   <a href="http://git.racket-lang.org/plt/aa5f2e7875..c07ff948ee" target="_blank">http://git.racket-lang.org/plt/aa5f2e7875..c07ff948ee</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; =====[ One Commit ]=====================================================<br>
&gt;&gt;&gt; &gt; Directory summary:<br>
&gt;&gt;&gt; &gt;  100.0% collects/web-server/scribblings/<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; ~~~~~~~~~~<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; c07ff94 Jay McCarthy &lt;<a href="mailto:jay@racket-lang.org">jay@racket-lang.org</a>&gt; 2013-01-04 05:44<br>
&gt;&gt;&gt; &gt; :<br>
&gt;&gt;&gt; &gt; | Fixes PR13406<br>
&gt;&gt;&gt; &gt; :<br>
&gt;&gt;&gt; &gt;   M collects/web-server/scribblings/dispatch.scrbl | 11 +++++++++--<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; =====[ Overall Diff ]===================================================<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; collects/web-server/scribblings/dispatch.scrbl<br>
&gt;&gt;&gt; &gt; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
&gt;&gt;&gt; &gt; --- OLD/collects/web-server/scribblings/dispatch.scrbl<br>
&gt;&gt;&gt; &gt; +++ NEW/collects/web-server/scribblings/dispatch.scrbl<br>
&gt;&gt;&gt; &gt; @@ -118,6 +118,7 @@ or else the filesystem server will never see the<br>
&gt;&gt;&gt; &gt; requests.<br>
&gt;&gt;&gt; &gt;   [maybe-method<br>
&gt;&gt;&gt; &gt;    code:blank<br>
&gt;&gt;&gt; &gt;    (code:line #:method method)]<br>
&gt;&gt;&gt; &gt; + [method pat]<br>
&gt;&gt;&gt; &gt;   [maybe-else-clause<br>
&gt;&gt;&gt; &gt;    code:blank<br>
&gt;&gt;&gt; &gt;    [else else-fun]])<br>
&gt;&gt;&gt; &gt; @@ -137,9 +138,15 @@ the @racket[dispatch-fun] given as its first<br>
&gt;&gt;&gt; &gt; argument.<br>
&gt;&gt;&gt; &gt;  @racket[(next-dispatcher)] to signal to the Web Server that this<br>
&gt;&gt;&gt; &gt;  dispatcher does not apply.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; - If any @racket[_method] is left out, it assumed to apply to requests<br>
&gt;&gt;&gt; &gt; -without methods and GET methods.<br>
&gt;&gt;&gt; &gt; + The @racket[_method] syntax is used in a @racket[match] expression to<br>
&gt;&gt;&gt; &gt; +match the @racket[request-method] part of the incoming request<br>
&gt;&gt;&gt; &gt; +object. However, since HTTP allows methods to use any case, the byte<br>
&gt;&gt;&gt; &gt; +string from @racket[request-method] is normalized to a lower-case<br>
&gt;&gt;&gt; &gt; +string. Thus, valid patterns are things like: @racket[&quot;get&quot;],<br>
&gt;&gt;&gt; &gt; +@racket[&quot;post&quot;], @racket[&quot;head&quot;], @racket[(or &quot;get&quot; &quot;post&quot;)], etc.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; + If @racket[_method] is left out, it assumed to apply to requests<br>
&gt;&gt;&gt; &gt; +without methods and GET methods.<br>
&gt;&gt;&gt; &gt;  }<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;  @defform[<br>
&gt;&gt;<br>
&gt;&gt;<br>
_________________________<br>
  Racket Developers list:<br>
  <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
</div></div></blockquote></div><br></div>