https://github.com/agupta666/elf
HTTP server console :alien:
https://github.com/agupta666/elf
cli http http-api http-mocking http-server interactive json service
Last synced: 9 days ago
JSON representation
HTTP server console :alien:
- Host: GitHub
- URL: https://github.com/agupta666/elf
- Owner: agupta666
- License: mit
- Created: 2016-09-02T19:05:32.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-09-15T17:11:12.000Z (over 8 years ago)
- Last Synced: 2024-06-20T14:21:43.362Z (over 1 year ago)
- Topics: cli, http, http-api, http-mocking, http-server, interactive, json, service
- Language: Go
- Homepage:
- Size: 56.6 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/agupta666/elf)
[](https://goreportcard.com/report/github.com/agupta666/elf)
# Elf
Elf is an HTTP server which lets you interact with it through a command-line interface. It gives you a quick and easy interface to set up `routes` and attach `actions` to them.
Elf provides a large collection of built-in actions, which can be added and configured with a fair amount of ease, from the command-line interface. And all of these can be achieved without writing a bit of code. The elf was primarily created for the purpose of quickly mocking HTTP based services without using going through the hassle of installing another scripting language.
Elf is a single executable that you can download and put in your path, to get started right away. Elf attempts to make it trivially easy to setup HTTP endpoints. The `elf` CLI provides a bash like command-line editing interface and intelligent `TAB` completions, that lets you manage routes and actions with ease.
> **NOTE:** Elf is an experiment and is expected to be used for testing purposes only. Elf is not intended for production usage.
## Install
```
$ go get github.com/agupta666/elf
```
## Quickstart
To start `elf`, fire the below command in a terminal. This starts Elf in interactive mode and drops
you to a prompt. Now you are ready to interact with the HTTP server listening on port 8080.
```
$ elf
starting default http endpoint 0.0.0.0:8080
elf>
```
Hitting the `TAB` key will display a list of commands supported by Elf. See the command reference section for
details of the individual commands.
## Routes and Actions
Elf lets you set up routes using the `route` command, which is of the form
```
elf> route
```
Thus when a request is received that matches the given path, elf executes the `action` attached to it.
For example, the below route command will attach a built-in action [which will respond with the contents of the `data.txt` file] for a request matching the given path.
```
elf> route /data @data.txt
```
Thus sending a HTTP request using curl, displays the response shown below.
```
$ curl -i http://localhost:8080/data
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Mon, 04 Sep 2017 18:40:49 GMT
Transfer-Encoding: chunked
contents of data.txt ...
```
## Built-in actions
| Action | Syntax | Meaning |
|------------|------------------------------------------|-----------------------------------------------------------------------|
| File | @ | Responds with the contents of the given file |
| Shell | ! | Responds with the output of the shell command |
| Markdown | # | Responds with HTML representation of the given markdown file |
| Redirect | ^ | Redirects to the given URL |
| Forward | % | Forwards the request to the given URL |
| Data | data[options...] | Responds with random data |
| Image | image[options...] | Responds with image data |
| JSON | json[data-set] | Responds with JSON representation of a data set |
| Upload | upload[options] | Saves the uploaded file to a specified folder |
| Directory | dir[options] | Serves files from the specified folder |
| Dump | dump[options] | Dumps the incoming HTTP request to a specified folder |
| Echo | echo[options] | Echoes back the incoming HTTP request |
## Action Reference
### File
This is a built-in action that serves a static file. A static file can be specified with its absolute path with `@` as a prefix.
E.g.:
```
route /static @/var/www/index.html
```
### Shell Commands
This is a builtin action which executes the specified command on the local server and responds with the output. This action can
be specified by prefixing `!` before the shell command
#### Examples
```
elf> route /clip !pbpaste
```
```
elf> route /go !"w3m -dump https://golang.org/doc/effective_go.html"
```
### Generate arbitrary data
```
elf> route /download "data[9024,.bin]"
elf> route /download "data[9024,.bin,trivia]"
```
### Generate Images
`route /some/route "image[width, height, color, format, name]"`
```
elf> route /download "image[400,400]"
elf> route /download "image[400,400, #E32171]"
elf> route /download "image[400,400, #E32171, .png]"
elf> route /download "image[400,400, #E32171, .png, gopher]"
```
### Respond with the JSON representation of a Key-Value set
Create a new Key-Value set
```
elf> kvset dset a:1 b:2 c:3
```
now add a route with a JSON action
```
elf> route /api json[dset]
```
### Upload files
add a route with upload action
```
elf> route /save "upload[/path/to/some/folder, picture]"
```
upload file with curl
```
$ curl --form picture=@somefile.png http://localhost:8080/save
```