Beautiful API JSON results in bash
Install the json command line JSON parsing package [docs].
npm install -g json
Once that’s installed, add the following functions to your bash initialization file (i.e. .zshrc
or .bashrc
you will find them in your home directory)
post () {
curl -s -X POST -D - --header "Content-Type: application/json" --data $1 $2 | json -i
}
delete () {
curl -s -X DELETE -D - $1 | json -i
}
put () {
curl -s -X PUT -D - --header "Content-Type: application/json" --data $1 $2 | json -i
}
get () {
if [ -z "$2" ]
then
curl -s -X GET -D - $1 | json -i
else
curl -s -X GET -D - $1 | json -ic $2
fi
}
Now you’re able to query an API and get the metadata headers, and the JSON. In addition, the JSON will be formatted and human readable.
GET
I have a very simple ASP.NET Web API running on port 5000. First, I'll request all children.
get http://localhost:5000/api/child
POST
Now, I'll create a new child with a name of Miles Johansson
.
post '{"name":"Miles Johansson"}' http://localhost:5000/api/child
PUT
Then I'll update his name to Miles Champion
.
put '{"childId":21, "name":"Miles Champion", "delivered": false}' http://localhost:5000/api/child/21
DELETE
Then I delete Miles. You'll notice he's gone after I run the delete
function.
delete http://localhost:5000/api/child/21
GET filtering
I updated the data set so that two of the children have their delivered
key set to true
. I'll use the filtering capabilities of the json
library to only show those children who had their toys delivered.
get http://localhost:5000/api/child 'this.delivered===true'
Next I'll find all children that have a u
in their name.
get http://localhost:5000/api/child 'this.name.match(/u/)!==null'