|
| 1 | +# Web (server and client) |
| 2 | + |
| 3 | +### Description |
| 4 | +Module that allows you to make small web servers and clients. |
| 5 | + |
| 6 | +### Import |
| 7 | +``` |
| 8 | +(import "web") |
| 9 | +``` |
| 10 | + |
| 11 | +### Usage |
| 12 | +#### Server |
| 13 | +```lisp |
| 14 | +-- Built for web client from examples |
| 15 | +
|
| 16 | +(import "std" "web" "json") |
| 17 | +
|
| 18 | +(defn greet (fn ln) (concat "Hello, " fn " " ln "!")) |
| 19 | +
|
| 20 | +- Create a handler |
| 21 | +(defn f (fn ln) (encode $ dict |
| 22 | + (first_name fn) |
| 23 | + (last_name ln) |
| 24 | + (greeting $ greet fn ln))) |
| 25 | +
|
| 26 | +(defn fpost (txt fn ln) (concat txt " " fn " " ln)) |
| 27 | +
|
| 28 | +(defn echo (body) body) |
| 29 | +
|
| 30 | +- Build + serve |
| 31 | +(serve |
| 32 | + $ routeGET "/greet" (list "fname" "lname") f |
| 33 | + $ routePOST "/post" (list "fname" "lname") fpost |
| 34 | + $ routePOST "/echo" () echo |
| 35 | + $ server 2025) |
| 36 | +``` |
| 37 | +#### Client |
| 38 | +```lisp |
| 39 | +-- Uses web server from examples |
| 40 | +
|
| 41 | +(import "web" "std" "io" "json") |
| 42 | +
|
| 43 | +- Build request |
| 44 | +(set rget $ send |
| 45 | + $ withParam "fname" "John" |
| 46 | + $ withParam "lname" "Black" |
| 47 | + $ get "http://localhost:2025/greet") |
| 48 | +
|
| 49 | +- Print response |
| 50 | +(print $ concat "Got response: " $ show rget) |
| 51 | +(print "Body:") |
| 52 | +(print $ resBody rget) |
| 53 | +
|
| 54 | +- Decode JSON and get a greeting |
| 55 | +(set gr $ lookup greeting $ fst $ decode $ resBody rget) |
| 56 | +
|
| 57 | +(print "Greeting:") |
| 58 | +(print gr) |
| 59 | +``` |
| 60 | + |
| 61 | +### Reference |
| 62 | +#### Server |
| 63 | +- `(server <number:port>)` -- creates a web server on port `port`. |
| 64 | +- `(routeGET <string:path> <list of strings:params> <function(params -> string):handler> <server>)` -- adds GET route to `server`. |
| 65 | +- `(routePOST <string:path> <list of strings:params> <function(body, params -> string):handler> <server>)` -- adds POST route to `server`. |
| 66 | +- `(serve <server>)` -- serves a server. |
| 67 | +#### Client |
| 68 | +- `(get <string:url>)` -- creates a GET request to `url`. |
| 69 | +- `(post <string:url>)` -- creates a POST request to `url`. |
| 70 | +- `(withParam <string:name> <string or list of strings:value(s)>)` -- adds param to request. |
| 71 | +- `(withBody <string:body>)` -- adds body to request. |
| 72 | +- `(send <request>)` -- sends `request` and returns response. |
| 73 | +- `(resStatus <response>)` -- returns statusCode of `response`. |
| 74 | +- `(resBody <response>)` -- returns body of `response`. |
| 75 | + |
| 76 | +### Source |
| 77 | +[Source](https://github.com/ProggerX/lapse-hs/tree/master/src/Lapse/Modules/Web) |
0 commit comments