Just as an addition, if you prefer a classic terminal experience the combination of curl and jq is pretty sweet, especially for GET (but not too bad for the others)
for GETs it's as easy as setting up an alias:
alias canvapi="curl -H \"Authorization: Bearer {secretlongtokenstring}\""
and then adding the api url and a quick pipe to jq, like this
canvapi https://uni.instructure.com/api/v1/courses/:course_id | jq
which gets you e.g.
{
"id": 20512,
"name": " Dank Memes and Dark Dreams",
"account_id": 5,
"etc": "etc.",
...
}
all nice in your terminal.
I have postman and some other similar apps, but I end up just using bash terminal & curl/jq most of the time (at least until something needs to be automated and turned into a tool for users)
jq has rich set of abilities beyond just pretty printing -- you can transform the data you get from the api and bend it to your needs. For example, if you just needed the id and name in the command above (try playing around with this, it's fun):
canvapi https://uni.instructure.com/api/v1/courses/:course_id \
| jq {id: .id, name: .name}
Of course all normal shell rules apply, so you can do some really tedious things quickly by combining the jq processing powers with shell scripting.
Here's an example I had lying around that can restore groups nn a production course from a beta course (assuming the instructor catches that they somehow broke their course groups before beta re-syncs (also, this specific issue hasn't come up for over a year, but I just tested it and it seems like it still works, so I guess that's good?
if [ $1 ]; then
crs_id=$1
token={secretlongtokenstring}
beta_can=uni.beta.instructure.com
can=uni.instructure.com
canvapi="curl -sS -H \"Authorization: Bearer $token\""
alias canvapi="curl -sS -H \"Authorization: Bearer $token\""
curl_b_group_ids="$canvapi -X GET \"https://$beta_can/api/v1/courses/$crs_id/groups\""
echo "restoring groups from $beta_can/courses/$crs_id to $can/courses/$crs_id"
mkdir $crs_id
eval $curl_b_group_ids | jq '.[] | .id' | while read group_id; do \
echo "getting group $group_id from $beta_can"; \
curl_group_id="$canvapi -X GET \"https://$beta_can/api/v1/groups/$group_id/users\" -F \"per_page=1000\""; \
eval $curl_group_id | jq '.' > $crs_id/$group_id; done
ls $crs_id | while read group_id; do cat $crs_id/$group_id | jq -r -c '.[] | .sis_user_id'| \
while read -r user_name; do \
fix_oops="$canvapi -X POST \"https://$can/api/v1/groups/$group_id/memberships\" -F \"user_id=sis_user_id:$user_name\"";\
echo "restoring $user_name to $can/courses/$crs_id/groups/$group_id"
eval $fix_oops| jq '.' >> $crs_id/fix_log.txt; done;done
exit 0
fi
It saves everything in a sub folder so you can look over it and make sure (after the fact) that it worked. Not really sure how often this specific one comes up (I think we only ever had to do it for one or two faculty members, and they eventually figured out how to not have this problem), but it's a good example of 22 lines of code saving hours of tedium (the course that caused this to be written had many groups involving hundreds of students - a nightmare to check in the groups ui) -- note the -F \"per_page=1000\" might no longer work in which case moving to an api tool might be prudent...