Crates.io | barb |
lib.rs | barb |
version | 0.4.3 |
source | src |
created_at | 2022-02-16 10:27:23.980831 |
updated_at | 2022-04-06 20:14:39.707567 |
description | Command-line tool to perform file-based HTTP(s) requests. |
homepage | |
repository | https://gitlab.com/guillaume54/barb |
max_upload_size | |
id | 533246 |
size | 163,569 |
Barb is a file-based API query tool that works nicely with version control and fits into UNIX terminal usage.
Table of Contents
Barb is only available through Cargo
at this time. To install the default version with JSONPath only, install rust with rustup.do like so:
cargo install barb
If you'd like to have JQ filtering; ensure the libjq
is installed on your machine, then run:
cargo install barb --features jq
barb [options] <file 1> <file 2> ... <file n>
-a, --all-headers
: Print all headers, request and response-b, --body
: Only print the response body-h, --headers
: Only print the response headers-r, --raw
: Don't format the response body-V, --version
: Print the software version-n, --no-color
: Don't use color output-f, --filter
: A JSON path to override any filters defined in the barb file-F, --no-filter
: Disable all filters (except for dependencies)--hdr <HDR>
: Set/override a header with format NAME=VALUE
, can appear multiple times (does not affect dependencies)--help
: Displays the help pageBarb uses a custom file format to perform requests. Each file contains one request and is started by a request preamble. Example:
#POST^http://my-blog.com/posts
#Authorization: TOKEN {API_TOKEN}
#$$.filter
{
"title": "A post",
"content": "My pretty blog post"
}
The preamble contains the directives relevant to performing the request, such as the method, URL and headers. The preamble must end with an empty line.
The verb line indicates to barb what sort of request to perform and where to. It follows this rigid format:
#<METHOD>^<URL>
The URL
supports variable substitution, but METHOD
does not.
Supported methods are:
Headers are formatted as follows:
#<HEADER NAME>: <HEADER VALUE>
The HEADER VALUE
supports variable substitution, HEADER NAME
does not.
There can be none or many headers.
Barb supports JSONPath filtering by default, and optionally JQ.
Barb supports filtering of the response body with JSONPath. This has the following format:
#$<JSON path>
The PATH
supports variable substitution. Refer to the JSONPath for more information on the filters and their syntax.
Filters can be named to populate execution variables by extracting values. Consider the following that will set the value of variable FOOBAR:
#FOOBAR$<JSON path>
Barb supports JQ filtering of the response body. This has the following format:
#|<JQ FILTER>
The JQ FILTER
supports variable substitution. Refer to the JQ manual for more information on the filters and their syntax.
Filters can be named to populate execution variables by extracting values. Consider the following that will set the value of variable FOOBAR:
#FOOBAR|<JQ FILTER>
A barb file can declare only one dependency which will be executed before the main file is executed. If multiple dependencies are declared, only the last one will be executed.
Syntax:
#>relative/path/to/file.barb
The path to the dependency can either be relative to the current file or absolute. When running multiple barb files which have the same dependency, that dependency will only be executed once.
A barb dependency cannot have dependencies of its own. Any dependency declared within a dependency will simply be ignored.
Anything after the preamble is considered as a body and will be send in the request for the following methods:
Body does not support variable substitution.
Barb can include environment variable values and variables defined in .env
into the requests with the following placeholder format:
{VARIABLE NAME}
This allows to do the following:
$ export BASE_URL="http://127.0.0.1:8000"
$ cat api-status.barb
#GET^{BASE_URL}/api/v1/status
$ barb api-status.barb
GET http://127.0.0.1:8000/api/v1/status
200 OK
{"status": "OK"}
A placholder can be given a default value that will be used if the environment variable is not available. The format is as follows:
{VARIABLE NAME:-DEFAULT}
Example:
$ cat api-ping.barb
#GET^http://{HOST:-foobar.com}/api/ping
$ barb api-ping.barb
GET http://foobar.com/api/ping
200 OK
{"response": "pong"}
$ HOST=bar.com barb api-ping.barb
GET http://bar.com/api/ping
200 OK
{"response": "pong"}