Re: HTTP request handler / middleware SRFI Peter 06 Apr 2019 07:30 UTC
> I looked at what Peter described above. His API and mine have some > similarities. I like how his definitions allow specifying the types of URL > parameters so that automatic conversion can happen. Is there some place to > look for more information on the return values? There's no documentation, only the code right now. They can easily be extended via `scgi:add-parameter-converter!'. I use that extensively, for example: (define-storable-structure <email-template> (id integer-or-false?) (name symbol?) (nice-name string?) (recipient string?) (category string?) (variables list?) (subject string?) (text string?)) (define (add-default-parameter-converter! name type) (scgi:add-parameter-converter! name (lambda (name value params) (if (and value (string? value) (every char-numeric? (string->list value)) (number? (string->number value))) (load-record type (string->number value)) #f)))) (add-default-parameter-converter! '<email-template> <email-template>) -> (define-url-handler (get "/" foo bar (email-template <email-template>)) ...) The defaults are defined like this: (scgi:add-parameter-converter! 'none (lambda (name value params) value)) (scgi:add-parameter-converter! 'boolean (lambda (name value params) (if value #t #f))) (scgi:add-parameter-converter! 'number (lambda (name value params) (if value (string->number value) #f))) (scgi:add-parameter-converter! 'symbol (lambda (name value params) (if value (string->symbol value) #f))) (scgi:add-parameter-converter! 'character (lambda (name value params) (if value (string-ref value 0) #f))) (scgi:add-parameter-converter! 'list (lambda (name value params) "Collect all parameters of the form NAME, put their values into a list. Drop empty strings." (filter (lambda (str) (not (string-null? str))) (scgi:parameters name))))