Artifact
46a84712e35bd8d0ff13342886ba3577e93e0830:
Wiki page
[Creating Responses] by
murphy
2011-09-23 22:13:19.
0000: 44 20 32 30 31 31 2d 30 39 2d 32 33 54 32 32 3a D 2011-09-23T22:
0010: 31 33 3a 31 39 2e 39 36 34 0a 4c 20 43 72 65 61 13:19.964.L Crea
0020: 74 69 6e 67 5c 73 52 65 73 70 6f 6e 73 65 73 0a ting\sResponses.
0030: 55 20 6d 75 72 70 68 79 0a 57 20 32 37 32 35 0a U murphy.W 2725.
0040: 3c 68 31 3e 43 72 65 61 74 69 6e 67 20 52 65 73 <h1>Creating Res
0050: 70 6f 6e 73 65 73 3c 2f 68 31 3e 0d 0a 0d 0a 45 ponses</h1>....E
0060: 61 63 68 20 72 65 71 75 65 73 74 20 68 61 6e 64 ach request hand
0070: 6c 65 72 20 69 73 20 65 78 70 65 63 74 65 64 20 ler is expected
0080: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 69 6e 73 to return an ins
0090: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 3c 74 74 tance of the <tt
00a0: 3e 72 65 73 70 6f 6e 73 65 3c 2f 74 74 3e 20 73 >response</tt> s
00b0: 74 72 75 63 74 75 72 65 20 74 79 70 65 20 74 68 tructure type th
00c0: 61 74 20 68 61 73 20 61 20 53 52 46 49 2d 39 39 at has a SRFI-99
00d0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 73 69 6d 69 definition simi
00e0: 6c 61 72 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f lar to the follo
00f0: 77 69 6e 67 20 6f 6e 65 3a 0d 0a 0d 0a 3c 76 65 wing one:....<ve
0100: 72 62 61 74 69 6d 3e 0d 0a 20 20 28 64 65 66 69 rbatim>.. (defi
0110: 6e 65 2d 72 65 63 6f 72 64 2d 74 79 70 65 20 28 ne-record-type (
0120: 72 65 73 70 6f 6e 73 65 20 6d 65 73 73 61 67 65 response message
0130: 29 0d 0a 20 20 20 20 23 66 20 23 74 0d 0a 20 20 ).. #f #t..
0140: 20 20 73 74 61 74 75 73 20 73 74 61 74 75 73 2d status status-
0150: 6d 65 73 73 61 67 65 29 0d 0a 3c 2f 76 65 72 62 message)..</verb
0160: 61 74 69 6d 3e 0d 0a 0d 0a 41 20 3c 74 74 3e 72 atim>....A <tt>r
0170: 65 73 70 6f 6e 73 65 3c 2f 74 74 3e 20 69 73 20 esponse</tt> is
0180: 61 63 74 75 61 6c 6c 79 20 61 20 73 75 62 74 79 actually a subty
0190: 70 65 20 6f 66 20 61 20 3c 74 74 3e 6d 65 73 73 pe of a <tt>mess
01a0: 61 67 65 3c 2f 74 74 3e 20 28 73 65 65 20 5b 49 age</tt> (see [I
01b0: 6e 74 65 72 70 72 65 74 69 6e 67 20 50 61 72 61 nterpreting Para
01c0: 6d 65 74 65 72 73 5d 29 20 61 6e 64 20 69 6e 68 meters]) and inh
01d0: 65 72 69 74 73 20 69 74 73 20 3c 74 74 3e 74 79 erits its <tt>ty
01e0: 70 65 3c 2f 74 74 3e 2c 20 3c 74 74 3e 68 65 61 pe</tt>, <tt>hea
01f0: 64 65 72 73 3c 2f 74 74 3e 20 61 6e 64 20 3c 74 ders</tt> and <t
0200: 74 3e 62 6f 64 79 3c 2f 74 74 3e 20 66 69 65 6c t>body</tt> fiel
0210: 64 73 2e 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 ds. In addition
0220: 74 68 65 20 6d 65 73 73 61 67 65 20 73 70 65 63 the message spec
0230: 69 66 69 65 73 20 74 68 65 20 73 74 61 74 75 73 ifies the status
0240: 20 63 6f 64 65 20 61 6e 64 20 73 74 61 74 75 73 code and status
0250: 20 6c 69 6e 65 20 6d 65 73 73 61 67 65 20 74 68 line message th
0260: 61 74 20 73 68 6f 75 6c 64 20 62 65 20 72 65 74 at should be ret
0270: 75 72 6e 65 64 20 74 6f 20 74 68 65 20 77 65 62 urned to the web
0280: 73 65 72 76 65 72 2e 0d 0a 0d 0a 54 6f 20 63 72 server.....To cr
0290: 65 61 74 65 20 61 20 72 65 73 70 6f 6e 73 65 2c eate a response,
02a0: 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 79 you can use any
02b0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e of the followin
02c0: 67 20 70 72 6f 63 65 64 75 72 65 73 3a 0d 0a 0d g procedures:...
02d0: 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 20 20 28 .<verbatim>.. (
02e0: 6d 61 6b 65 2d 72 65 73 70 6f 6e 73 65 20 53 54 make-response ST
02f0: 41 54 55 53 20 42 4f 44 59 20 5b 23 3a 74 79 70 ATUS BODY [#:typ
0300: 65 20 54 59 50 45 5d 20 5b 23 3a 68 65 61 64 65 e TYPE] [#:heade
0310: 72 73 20 48 45 41 44 45 52 53 5d 20 5b 23 3a 73 rs HEADERS] [#:s
0320: 74 61 74 75 73 2d 6d 65 73 73 61 67 65 20 53 54 tatus-message ST
0330: 41 54 55 53 2d 4d 45 53 53 41 47 45 5d 29 20 3d ATUS-MESSAGE]) =
0340: 3e 20 52 45 53 50 4f 4e 53 45 0d 0a 3c 2f 76 65 > RESPONSE..</ve
0350: 72 62 61 74 69 6d 3e 0d 0a 43 72 65 61 74 65 73 rbatim>..Creates
0360: 20 61 20 6d 65 73 73 61 67 65 20 67 69 76 65 6e a message given
0370: 20 61 20 6e 75 6d 65 72 69 63 20 3c 74 74 3e 53 a numeric <tt>S
0380: 54 41 54 55 53 3c 2f 74 74 3e 20 63 6f 64 65 20 TATUS</tt> code
0390: 61 6e 64 20 61 20 73 74 72 69 6e 67 20 3c 74 74 and a string <tt
03a0: 3e 42 4f 44 59 3c 2f 74 74 3e 2e 20 4f 70 74 69 >BODY</tt>. Opti
03b0: 6f 6e 61 6c 6c 79 20 79 6f 75 20 6d 61 79 20 73 onally you may s
03c0: 70 65 63 69 66 79 20 61 20 63 6f 6e 74 65 6e 74 pecify a content
03d0: 20 3c 74 74 3e 54 59 50 45 3c 2f 74 74 3e 20 28 <tt>TYPE</tt> (
03e0: 77 68 69 63 68 20 79 6f 75 20 70 72 6f 62 61 62 which you probab
03f0: 6c 79 20 73 68 6f 75 6c 64 2c 20 73 69 6e 63 65 ly should, since
0400: 20 74 68 65 20 64 65 66 61 75 6c 74 20 69 73 20 the default is
0410: 3c 74 74 3e 61 70 70 6c 69 63 61 74 69 6f 6e 2f <tt>application/
0420: 6f 63 74 65 74 2d 73 74 72 65 61 6d 3c 2f 74 74 octet-stream</tt
0430: 3e 29 2c 20 61 64 64 69 74 69 6f 6e 61 6c 20 3c >), additional <
0440: 74 74 3e 48 45 41 44 45 52 53 3c 2f 74 74 3e 20 tt>HEADERS</tt>
0450: 6f 72 20 61 6e 20 65 78 70 6c 69 63 69 74 20 3c or an explicit <
0460: 74 74 3e 53 54 41 54 55 53 2d 4d 45 53 53 41 47 tt>STATUS-MESSAG
0470: 45 3c 2f 74 74 3e 20 28 74 68 65 20 64 65 66 61 E</tt> (the defa
0480: 75 6c 74 20 69 73 20 64 65 72 69 76 65 64 20 66 ult is derived f
0490: 72 6f 6d 20 74 68 65 20 3c 74 74 3e 53 54 41 54 rom the <tt>STAT
04a0: 55 53 3c 2f 74 74 3e 20 63 6f 64 65 29 2e 0d 0a US</tt> code)...
04b0: 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 20 20 ..<verbatim>..
04c0: 28 63 6f 6c 6c 65 63 74 2d 72 65 73 70 6f 6e 73 (collect-respons
04d0: 65 20 53 54 41 54 55 53 20 54 48 55 4e 4b 20 5b e STATUS THUNK [
04e0: 23 3a 74 79 70 65 20 54 59 50 45 5d 20 5b 23 3a #:type TYPE] [#:
04f0: 68 65 61 64 65 72 73 20 48 45 41 44 45 52 53 5d headers HEADERS]
0500: 20 5b 23 3a 73 74 61 74 75 73 2d 6d 65 73 73 61 [#:status-messa
0510: 67 65 20 53 54 41 54 55 53 2d 4d 45 53 53 41 47 ge STATUS-MESSAG
0520: 45 5d 29 20 3d 3e 20 52 45 53 50 4f 4e 53 45 0d E]) => RESPONSE.
0530: 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 57 6f .</verbatim>..Wo
0540: 72 6b 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 3c rks similar to <
0550: 74 74 3e 6d 61 6b 65 2d 72 65 73 70 6f 6e 73 65 tt>make-response
0560: 3c 2f 74 74 3e 20 65 78 63 65 70 74 20 74 68 61 </tt> except tha
0570: 74 20 74 68 65 20 6d 65 73 73 61 67 65 20 62 6f t the message bo
0580: 64 79 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 dy is computed b
0590: 79 20 69 6e 76 6f 6b 69 6e 67 20 3c 74 74 3e 54 y invoking <tt>T
05a0: 48 55 4e 4b 3c 2f 74 74 3e 2c 20 77 68 69 63 68 HUNK</tt>, which
05b0: 20 69 73 20 65 78 70 65 63 74 65 64 20 74 6f 20 is expected to
05c0: 77 72 69 74 65 20 74 68 65 20 64 65 73 69 72 65 write the desire
05d0: 64 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 d content to the
05e0: 20 63 75 72 72 65 6e 74 20 6f 75 74 70 75 74 20 current output
05f0: 70 6f 72 74 2e 0d 0a 0d 0a 3c 76 65 72 62 61 74 port.....<verbat
0600: 69 6d 3e 0d 0a 20 20 28 6d 61 6b 65 2d 68 74 6d im>.. (make-htm
0610: 6c 2d 72 65 73 70 6f 6e 73 65 20 53 54 41 54 55 l-response STATU
0620: 53 20 48 54 4d 4c 20 5b 23 3a 68 65 61 64 65 72 S HTML [#:header
0630: 73 20 48 45 41 44 45 52 53 5d 20 5b 23 3a 73 74 s HEADERS] [#:st
0640: 61 74 75 73 2d 6d 65 73 73 61 67 65 20 53 54 41 atus-message STA
0650: 54 55 53 2d 4d 45 53 53 41 47 45 5d 29 20 3d 3e TUS-MESSAGE]) =>
0660: 20 52 45 53 50 4f 4e 53 45 0d 0a 3c 2f 76 65 72 RESPONSE..</ver
0670: 62 61 74 69 6d 3e 0d 0a 57 6f 72 6b 73 20 73 69 batim>..Works si
0680: 6d 69 6c 61 72 20 74 6f 20 3c 74 74 3e 6d 61 6b milar to <tt>mak
0690: 65 2d 72 65 73 70 6f 6e 73 65 3c 2f 74 74 3e 20 e-response</tt>
06a0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 except that the
06b0: 6d 65 73 73 61 67 65 20 62 6f 64 79 20 69 73 20 message body is
06c0: 64 65 72 69 76 65 64 20 66 72 6f 6d 20 61 20 48 derived from a H
06d0: 54 4d 4c 35 20 72 65 6e 64 65 72 69 6e 67 20 6f TML5 rendering o
06e0: 66 20 74 68 65 20 58 2d 65 78 70 72 65 73 73 69 f the X-expressi
06f0: 6f 6e 20 3c 74 74 3e 48 54 4d 4c 3c 2f 74 74 3e on <tt>HTML</tt>
0700: 2e 20 54 68 69 73 20 65 78 70 72 65 73 73 69 6f . This expressio
0710: 6e 20 6d 75 73 74 20 62 65 20 61 6e 20 3c 74 74 n must be an <tt
0720: 3e 45 4c 45 4d 45 4e 54 3c 2f 74 74 3e 20 61 63 >ELEMENT</tt> ac
0730: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 cording to the f
0740: 6f 6c 6c 6f 77 69 6e 67 20 67 72 61 6d 6d 61 72 ollowing grammar
0750: 3a 0d 0a 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 20 :..<verbatim>..
0760: 20 58 45 58 50 52 20 20 20 3d 20 45 4c 45 4d 45 XEXPR = ELEME
0770: 4e 54 20 7c 20 43 4f 4e 54 45 4e 54 0d 0a 20 20 NT | CONTENT..
0780: 45 4c 45 4d 45 4e 54 20 3d 20 28 6c 69 73 74 20 ELEMENT = (list
0790: 53 59 4d 42 4f 4c 20 28 6c 69 73 74 20 28 6c 69 SYMBOL (list (li
07a0: 73 74 20 53 59 4d 42 4f 4c 20 43 4f 4e 54 45 4e st SYMBOL CONTEN
07b0: 54 20 2e 2e 2e 29 20 2e 2e 2e 29 20 58 45 58 50 T ...) ...) XEXP
07c0: 52 20 2e 2e 2e 29 20 3b 3b 20 65 6c 65 6d 65 6e R ...) ;; elemen
07d0: 74 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 77 69 74 t optionally wit
07e0: 68 20 61 74 74 72 69 62 75 74 65 73 0d 0a 20 20 h attributes..
07f0: 20 20 20 20 20 20 20 20 7c 20 28 6c 69 73 74 20 | (list
0800: 53 59 4d 42 4f 4c 20 58 45 58 50 52 20 2e 2e 2e SYMBOL XEXPR ...
0810: 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 )
0820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0830: 20 20 20 20 20 20 20 3b 3b 20 65 6c 65 6d 65 6e ;; elemen
0840: 74 20 77 69 74 68 6f 75 74 20 61 74 74 72 69 62 t without attrib
0850: 75 74 65 73 0d 0a 20 20 43 4f 4e 54 45 4e 54 20 utes.. CONTENT
0860: 3d 20 53 54 52 49 4e 47 20 20 20 20 20 20 20 20 = STRING
0870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
08a0: 3b 20 63 68 61 72 61 63 74 65 72 20 64 61 74 61 ; character data
08b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7c 20 53 59 .. | SY
08c0: 4d 42 4f 4c 20 20 20 20 20 20 20 20 20 20 20 20 MBOL
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08f0: 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 73 79 ;; sy
0900: 6d 62 6f 6c 69 63 20 65 6e 74 69 74 79 20 72 65 mbolic entity re
0910: 66 65 72 65 6e 63 65 0d 0a 20 20 20 20 20 20 20 ference..
0920: 20 20 20 7c 20 49 4e 54 45 47 45 52 20 20 20 20 | INTEGER
0930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0960: 20 20 3b 3b 20 6e 75 6d 65 72 69 63 20 65 6e 74 ;; numeric ent
0970: 69 74 79 20 72 65 66 65 72 65 6e 63 65 0d 0a 3c ity reference..<
0980: 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 54 68 65 20 /verbatim>..The
0990: 63 6f 6e 74 65 6e 74 20 74 79 70 65 20 6f 66 20 content type of
09a0: 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6d 65 the resulting me
09b0: 73 73 61 67 65 20 69 73 20 3c 74 74 3e 74 65 78 ssage is <tt>tex
09c0: 74 2f 68 74 6d 6c 3c 2f 74 74 3e 2e 0d 0a 0d 0a t/html</tt>.....
09d0: 3c 76 65 72 62 61 74 69 6d 3e 0d 0a 20 20 28 6d <verbatim>.. (m
09e0: 61 6b 65 2d 65 72 72 6f 72 2d 72 65 73 70 6f 6e ake-error-respon
09f0: 73 65 20 53 54 41 54 55 53 20 4d 45 53 53 41 47 se STATUS MESSAG
0a00: 45 20 5b 23 3a 68 65 61 64 65 72 73 20 48 45 41 E [#:headers HEA
0a10: 44 45 52 53 5d 20 5b 23 3a 73 74 61 74 75 73 2d DERS] [#:status-
0a20: 6d 65 73 73 61 67 65 20 53 54 41 54 55 53 2d 4d message STATUS-M
0a30: 45 53 53 41 47 45 5d 29 20 3d 3e 20 52 45 53 50 ESSAGE]) => RESP
0a40: 4f 4e 53 45 0d 0a 3c 2f 76 65 72 62 61 74 69 6d ONSE..</verbatim
0a50: 3e 0d 0a 57 6f 72 6b 73 20 73 69 6d 69 6c 61 72 >..Works similar
0a60: 20 74 6f 20 3c 74 74 3e 6d 61 6b 65 2d 68 74 6d to <tt>make-htm
0a70: 6c 2d 72 65 73 70 6f 6e 73 65 3c 2f 74 74 3e 20 l-response</tt>
0a80: 62 75 74 20 75 73 65 73 20 61 20 70 72 65 64 65 but uses a prede
0a90: 66 69 6e 65 64 20 63 6f 6e 74 65 6e 74 20 64 6f fined content do
0aa0: 63 75 6d 65 6e 74 20 69 6e 74 6f 20 77 68 69 63 cument into whic
0ab0: 68 20 69 74 20 6f 6e 6c 79 20 69 6e 73 65 72 74 h it only insert
0ac0: 73 20 74 68 65 20 67 69 76 65 6e 20 65 72 72 6f s the given erro
0ad0: 72 20 3c 74 74 3e 4d 45 53 53 41 47 45 3c 2f 74 r <tt>MESSAGE</t
0ae0: 74 3e 2e 0d 0a 0a 5a 20 30 33 39 33 38 64 61 38 t>....Z 03938da8
0af0: 30 31 31 32 62 65 66 39 34 63 63 63 37 61 37 39 0112bef94ccc7a79
0b00: 38 62 32 37 32 36 38 64 0a 8b27268d.