You are looking at historical revision 17931 of this page. It may differ significantly from its current revision.



spiffy-request-vars provides easy access to variables from HTTP requests.


Mario Domenech Goulart

Thanks to DerGuteMoritz for the implementation of the content body reader and for several terminology suggestions (including the egg name). Also thanks to Peter Bex for the helpful discussions and lots of implementation suggestions.

Procedures and macros

[procedure] (request-vars #!key (source 'both) max-content-length)

request-vars returns a procedure which can be used to access variables from the HTTP request. The returned procedure takes the name of the variable (either a symbol or a string) as argument. You can (optionally) also pass a default value to be returned in case the variable is not set and an one-argument procedure to be used as a type converter for the variable value (e.g., string->number).

request-vars accepts some keyword arguments:

'query-string tells request-vars to parse the query string only (for GET variables). 'request-body tells request-vars to parse the request body only (e.g., for POST variables). 'both tells request-vars to parse both the request body and the query string. The default value for source is 'both. Notice that when 'both is used, variables from the request body have precedence over the ones from the query string.
the maximum content length (in characters) to be read from the request body. Default is #f (no limit).


  (let (($ (request-vars)))
    ($ 'var1)
    ($ 'var2 "") ;; if var12 is not set, return ""
    ($ 'var3 0 string->number)) ;; if var3 is not set, return 0; if it is
                                ;; set, convert its value to a number
[syntax] (with-request-vars [getter] (var1 var2 ... varN) expr1 expr2 ... exprN)

Bind the given identifiers to the corresponding query string and request body variable values and evaluate the expressions. The optional getter argument (the return value of request-vars) may be used in situations when you already have the getter and don't want to reparse the query string and request body. With with-request-vars*, the given getter will be used and no reparsing will be performed. When the syntax is ambiguous (e.g., (with-request-vars (request-vars) (var1 var2) (body)), with-request-vars* can be used).


(with-request-vars (a b c)
   (conc "a = " a
         "b = " b
         "c = " c))
(let (($ (request-vars)))
  (with-request-vars $ (a b c)
     (conc "a = " a
           "b = " b
           "c = " c)))
[syntax] (with-request-vars* getter (var1 var2 ... varN) expr1 expr2 ... exprN)

The same as with-request-vars, but the getter is mandatory.




Version history

with-request-vars* resurrected. For the cases when the syntax of with-request-vars is ambiguous.
Removed with-request-vars*. with-request-vars accepts an optional getter argument
Added with-request-vars and with-request-vars*
Initial release