Skip to content

A tiny web framework for guile

License

LGPL-3.0, GPL-3.0 licenses found

Licenses found

LGPL-3.0
COPYING.LESSER
GPL-3.0
COPYING
Notifications You must be signed in to change notification settings

petelliott/schingle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

935f930 · Aug 26, 2022
Aug 26, 2022
Aug 26, 2022
Aug 25, 2019
Aug 25, 2019
Aug 26, 2022
Aug 26, 2022
Aug 26, 2022
Sep 13, 2019
Aug 26, 2022
Jul 14, 2020
Aug 26, 2022
Aug 26, 2022
Aug 26, 2022
Aug 26, 2022
Aug 26, 2022
Aug 26, 2022

Repository files navigation

schingle

schingle (pronounced shingle) is a tiny web framework for guile inspired by ningle (hence "SCHeme nINGLE") and sinatra. It is licensed under the LGPLv3.

(GET /hello/:name
     (lambda (request body :name)
       (plain (format #f "Hello, ~a!" :name))))

installation

  1. install guile-json

  2. clone this repository into somewhere on guile's %load-path

a more fleshed out example

(use-modules (schingle schingle)
             (schingle middleware))

; paths in schingle may be strings or symbols:
(GET "/hello"
     (lambda (request body)
       (plain "Hello World")))

(GET /hello/:name
     (lambda (request body :name)
       (plain (format #f "Hello, ~a!" :name))))

(GET /error
     (lambda (request body)
       (car '()) ; cause an error to invoke 500 handler
       (plain "this shouldn't happen")))

; html form support

(GET /form
     (lambda (request body)
         (plain (format #f "Hello, ~a ~a!"
                        (query "firstname")
                        (query "lastname")))))

(POST /form
      (lambda (request body)
        (plain (format #f "Hello, ~a ~a!"
                       (assoc-ref body "firstname")
                       (assoc-ref body "lastname")))))
; simple return types

(GET /json/:value
     (lambda (request body :value)
       (json `((value . ,:value)))))

(GET /xml/:value
     (lambda (request body :value)
       (xml `(value ,:value))))

(GET /html/:value
     (lambda (request body :value)
       (html `((html (p ,:value))))))

(GET /sexp/:value
     (lambda (request body :value)
       (sexp `((value . ,:value)))))

(GET /urlencoded/:value
     (lambda (request body :value)
       (urlencoded `((value . ,:value)))))

; static files

(GET "/schingle/(.*.scm)"
     (lambda (request body filename)
       (static filename 'text/plain)))

; templates

(GET /template/:name
     (lambda (request body :name)
       (template "template.mustache" `((name . ,:name)
                                       (listitems ((text . "hello"))
                                                  ((text . "world")))))))

(schingle-static-folder "../")

(define (custom404 request body)
  "a custom 404 handler. custom 500 and 400 handlers can also be defined"
  (plain "oopsiedoo" #:code 404))

(run-schingle #:middleware (list (make-cors-middleware))
              #:port 8080 ; optional setting of port
              #:use-cache #t ; optional cache for static files and templates
              #:h404 custom404)

About

A tiny web framework for guile

Resources

License

LGPL-3.0, GPL-3.0 licenses found

Licenses found

LGPL-3.0
COPYING.LESSER
GPL-3.0
COPYING

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages