Package: bprc
BPRCBatch Processing RESTFul ClientA Dev/DevOps tool to automate calling a set of RESTFul JSON endpoints,
with the ability to grab data from the JSON payload and use it in
subsequent calls in the recipe.What it doesIf you’re a Dev/DevOps engineer you may have been faced with a situation
where you find yourself writing a shell script to automate getting JSON
data from one or more RESTful endpoints usingcurlorwgetorhttpie, and then parsing the output usingsed,greporjq. This tool is designed to provide a generic, simplied, yet
powerful means of writing such scripts in the form of a simplerecipespecification, rather than a shell script.It relies on the excellentPygmentsandRequestslibraries.To installThis is a Python application which is written in Python 3. It has only
currently been tested on Linux (Ubuntu 14.04).Pre-requisitesMake sure you’ve installed Python 3 and Pip 3$apt-getinstall-ypython3$apt-getinstall-ypython3-pipInstallationInstall like this:$pip3installbprcOr a tagged version directly from GitHub (as PyPI can sometimes be
erratic)$pip3installhttps://github.com/bradwood/BPRC/tarball/x.y.x# replace with version tag in GitHub, no tar.gz extension neededHow it worksThe recipe is specified in a single YAML file which describes: - A list
of variables that are initialised at the top of the recipe for use in
the steps below. - A list of ordered steps that comprise the recipe,
each containing some or all of the below: - the URL that need to be
visited - the HTTP method to use - the headers, querystring and body
data to include in the step - specific options to pass into the this
step – currently only the following options are supported: -request.retries- set to the number of retries to attempt on the
step in question. Only works for non-mutating calls (e.g., GETs),
defaults to 3. -request.body_format- can be set tojson(default) orform. Will assemble the request body as either
form-encoded or json and set theContent-type:header toapplication/x-www-form-urlencodedorapplication/jsonrespectively.Additionally, the YAML recipe file supports the ability to grab data
from any part of any of the HTTP requests or responses in earlier steps
in the recipe and insert them into later steps using a PHP-like
construct. For example, say I have a 10-step recipe specified and in
step 7 I need to POST some data that I received in step 3’s reponse. I
can include a construct like this in any part of the YAML file:<%=steps[3].response.body["id"]%>Assuming that step 3 did indeed contain a parameter calledidin
it’s JSON response payload, this data will then be substituted in the
specified part of step 10’s request.The insertion of variables anywhare in the recipe is done as shown:<%!varname%>Files can also be included into a recipe using a construct like this:<%f/path/to/file.txt%>Sample RecipeThis functionality is best illustrated with a complete recipe file as
shown below.---#sample recipevariables:name:bradfavourite_colour:redage:345drinks_beer:trueage_and_colour:<%!age%>:<%!favourite_colour%>lorumfile:<%f./examples/lorum.txt%>recipe:-# step0name:Call Mockbin# see http://mockbin.org/docs#http-requesthttpmethod:POST# using the HTTP Basic auth process to see if the Authorization: header# is visible in the output file.URL:http://Aladdin:OpenSesame@mockbin.org/request/path/to/<%!name%>request:body:name:My name is <%!name%>age:I am <%!age%> years old.beer_drinker:<%!drinks_beer%>lorum_impsum:<%!lorumfile%>querystring:colors:blue, green,  <%!favourite_colour%>headers:X-info:<%!age_and_colour%>-name:Call Mockbin with data from the previous call.httpmethod:GEToptions:request.retries:10#set retries to 10, overriding the default of 3.URL:http://mockbin.org/request/path/to/<%!name%>request:headers:date_header_from_previous_call:<%=steps[0].response.headers["Date"]%>body:http_response_code_from_previous_call:<%=steps[0].response.code%>Other featuresbprcprovides the following features: - robust logging support -
saving output files as raw HTTP (response only, or both request and
response) or JSON - SSL support (including the ability to ingore invalid
server certificates) - verbose and/or debug output - HTTP request bodies
formatted either as JSON or form-encoded - Pretty-printed outputKnown issues/shortcomingsThe following are known areas for improvement: - poor tolerance of badly
formatted YAML ---dry-runoption not implemented - poor test
coverage and test automation - only handles JSON in the response bodies,
XML or ther payload types are not supported.Planned improvementsimproving error handlingbetter test coverageImplementing--dry-runpassing an entire payload, rather than just a single parameter, using
a file includesetting a recipe variable via cli and/or environment variableContributingContributions are welcome! Please fork, make your changes, add tests to
cover your work and then raise a pull request.