CLI tool for sending predefined HTTP requests.
To run a request:
kuiper path/to/request_file -e env_file.env
When you run a request, kuiper traverses the directories on the way to the specified file, and looks for headers.json files on the way. Header values in child directories take precedence over their parents. The request in the specified file can also have headers specified, which takes precedence over the files on the way to the request. Finally, you can specify additional header files with -H, which take precedence over everything else. Take a look at the requests folder in the source repository for this project for some examples.
parent/
| headers.json {"header_a": "value_a", "header_b": "value_b"}
| request.json
| ^ this request would have {"header_a": "value_a", "header_b": "value_b"}
| child/
| headers.json {"header_b": "value_c"}
| request.json // request file in child dir
| ^ this request would have {"header_a": "value_a", "header_b": "value_c"}
Headers can be removed by explicitly setting them to null, so if you wanted child/request.json to not send the header_a header, you could either set it to null in request.json, or in child/headers.json
Request files are just JSON files, and look like this:
{
"uri": "http://localhost/api/user/{{env:user_id}}",
"method": "GET",
"params": {
"query_param_1": "query_param_value"
},
"headers": {
"request_specific_header_1": "request_specific_header_value_1"
}
}Values can be evaluated dynamically in two different ways when parsing a .kuiper file.
{{env:ENV_VAR}}This will be replaced by the value of the environment variableENV_VAR.{{expr:EXPRESSION}}This will be replaced by a value depending on whatEXPRESSIONis. Currently, the only supported expressions areuuid, for generating a uuid, andnowfor generating a timestamp.
I often find myself wanting to send simple HTTP requests when I am building APIs, and historically I have used Postman for this. But Postman is pretty bloated in my opinion - doing too much not well enough. kuiper is not intended to replace what Postman can do with automated integration tests, pre- and post-request scripts etc. It is just a tool for defining and running HTTP requests in a manner that can be source controlled.