[plt-scheme] Supporting PUT (etc) in the web-server
Greetings.
The PLT web-server has good support for HTTP GET and POST, but none of
the other methods. It supports DELETE by default, but not HEAD or
PUT. HEAD one can live without, but not PUT. What's the best way for
me to add support for these in an application? I'm looking at version
370, but the online documentation for request-structs in 3.99[1] shows
the same struct for REQUEST, suggesting that this problem isn't about
to evaporate in the next release.
The restriction comes about, as far as I can see, because it's only
'get and 'post which are explicitly supported in the function READ-
BINDINGS&POST-DATA/RAW in web-server/private/request.ss. Other
methods don't cause an error, but result in the content of the
connection apparently being ignored, and specifically being
unavailable in the REQUEST structure.
As far as I can see, the neatest way of getting round this in the case
of PUT is to add another field to the REQUEST structure, containing
the connection-i-port corresponding to the input stream, then adjust
the content and interface of READ-BINDINGS&POST-DATA/RAW and the call
to it in READ-REQUEST. An alternative would be to overload either the
post-data/raw field or construct a pseudo-binding with the stream as
value, which would mean at least that the REQUEST structure wouldn't
have to change.
The question is, should I even attempt this, and if so, what's the
most robust way to do so? Providing an alternative application-local
version of READ-REQUEST seems fragile even if it's feasible.
Thanks for any advice.
Best wishes,
Norman
[1] http://docs.plt-scheme.org/web-server/request-structs_ss.html
--
Norman Gray : http://nxg.me.uk
eurovotech.org : University of Leicester