|
|
||
|---|---|---|
| .. | ||
| instruments | ||
| notes | ||
| references | ||
| tunes | ||
| base.ain | ||
| health.ain | ||
| README.md | ||
ain templates
ain is a terminal HTTP client. These templates cover every API endpoint.
Setup
1. Install ain
brew install ain # macOS
# or: go install github.com/jonaslu/ain/cmd/ain@latest
ain requires curl, wget, or httpie to be available — curl is already on macOS.
2. Configure connection details
ain picks up variables from the project root .env automatically when run from the project root. make local will have already created that file for you. The relevant variables are:
API_KEY=dev-secret-key-change-me
REPERTORY_HOST=http://localhost:5000
3. Run a template
Every template is run by combining base.ain with a specific template file. base.ain provides the host and auth header; the specific file adds the path, method, and body.
ain ain/base.ain ain/health.ain
Templates
Health
ain ain/base.ain ain/health.ain
Tunes
# List all tunes
ain ain/base.ain ain/tunes/list.ain
# List with filters (edit the [Query] section in the file first)
ain ain/base.ain ain/tunes/list-filtered.ain
# Get a single tune
ain ain/base.ain ain/tunes/get.ain --vars ID=1
# Create a tune (edit the [Body] in the file first)
ain ain/base.ain ain/tunes/create.ain
# Update core fields
ain ain/base.ain ain/tunes/update.ain --vars ID=1
# Delete a tune
ain ain/base.ain ain/tunes/delete.ain --vars ID=1
Instruments (banjo / fiddle)
# Create or replace a banjo entry
ain ain/base.ain ain/instruments/upsert-banjo.ain --vars ID=1
# Create or replace a fiddle entry
ain ain/base.ain ain/instruments/upsert-fiddle.ain --vars ID=1
# Patch individual banjo fields
ain ain/base.ain ain/instruments/patch-banjo.ain --vars ID=1
# Patch individual fiddle fields
ain ain/base.ain ain/instruments/patch-fiddle.ain --vars ID=1
# Delete banjo entry
ain ain/base.ain ain/instruments/delete-banjo.ain --vars ID=1
# Delete fiddle entry
ain ain/base.ain ain/instruments/delete-fiddle.ain --vars ID=1
Notes
# List notes for a tune
ain ain/base.ain ain/notes/list.ain --vars ID=1
# Add a note
ain ain/base.ain ain/notes/create.ain --vars ID=1
# Update a note
ain ain/base.ain ain/notes/update.ain --vars ID=1 NOTE_ID=2
# Delete a note
ain ain/base.ain ain/notes/delete.ain --vars ID=1 NOTE_ID=2
References
# List references for a tune
ain ain/base.ain ain/references/list.ain --vars ID=1
# Add a reference (with optional musicians in the body)
ain ain/base.ain ain/references/create.ain --vars ID=1
# Update a reference
ain ain/base.ain ain/references/update.ain --vars ID=1 REF_ID=2
# Delete a reference
ain ain/base.ain ain/references/delete.ain --vars ID=1 REF_ID=2
# Add a musician to a reference
ain ain/base.ain ain/references/add-musician.ain --vars ID=1 REF_ID=2
# Remove a musician from a reference
ain ain/base.ain ain/references/delete-musician.ain --vars ID=1 REF_ID=2 NAME="Tony Rice"
Tips
- Print without sending:
ain -p ain/base.ain ain/tunes/list.ain— shows the curl command ain would run, useful for debugging - Pipe output:
ain ain/base.ain ain/tunes/list.ain | jq .— pipe straight into jq or anything else - Multiple filters: edit
ain/tunes/list-filtered.ainand remove the query params you don't need before running - Musician names with spaces: quote the whole
--varsvalue:--vars NAME="Doc Watson"