WebGate

Hex Artifact Content
Login

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.