Awesome
Vesper - HTTP Framework for Bash Shell
vesper
is a collection of shell functions to make it super easy to generate valid http responses. Vesper is not a web server itself, its just the framework to parse http requests and generate valid responses.
This is crazy, who needs a http framework for unix shell?
That is a very good question! If you would have asked me that question a year ago, I would have argued: nobody. Now, I am not sure anymore. How will sh/bash scripts work in the future of cloud and serverless? Consider reading my blog Introducing Vesper - HTTP Framework for Unix Shell.
Get Started
Hello World
source "vesper.sh"
# parses the http request
http_request
# generate the response
http_response StatusOK "text/plain"
echo 'Hello World'
echo $HTTP_REQUEST_URI
Generate an Image
source "vesper.sh"
http_response StatusOK "image/jpeg"
echo "James Bond" | convert -font Arial -pointsize 72 -fill white -background black text:- -trim png:- >&1
Seeing is believing
# hello world example
ncat -lk -p 8081 --sh-exec examples/helloworld.sh
# json example
ncat -lk -p 8081 --sh-exec examples/json.sh
# image example
ncat -lk -p 8081 --sh-exec examples/image.sh
# pdf example
ncat -lk -p 8081 --sh-exec examples/pdf.sh
# file streaming example
ncat -lk -p 8081 --sh-exec examples/file_stream.sh
# router example
ncat -lk -p 8081 --sh-exec examples/router.sh
Examples
To see all the examples in place justs run:
Start the server
# download the test pdf
wget http://tiswww.case.edu/php/chet/bash/rose94.pdf
# start the server
ncat -lk -p 8081 --sh-exec ./examples/router.sh
Visit the url localhost:8081
Dependencies
ncat
- used to execute the bash scripts on incoming requestscat
- used to pipe file contentfile
- used to determine the mime typestat
- used to determine the file size
Debian
apt-get install ncat
apt-get install file
Centos
yum install nmap
yum install file
Mac
brew install nmap
FAQ
Why is the project named vesper?
Popular web frameworks like martini and gin are named after cocktails and one of James Bond's famous cocktails is called vesper.
Is vesper production ready?
Its build on tooling that is around for decades. The foundation is battle-tested. While this is the case, its not designed for web-scale workloads.
Should I switch from my popular http framework X to vesper?
Most likely not
Are there limitations
At this point, its only tested with http GET methods
Open questions
- What is the best way to handle execution errors?
- What is the stable way to verify http query params?
Authors
- Christoph Hartmann - Research & Prototype - chris-rock
See also the list of contributors who participated in this project.
Sponsors
The research and the development was sponsored by mondoo
License
This project is licensed under the Apache 2 License - see the LICENSE.md file for details