Bird
Raised Fist0
Bash Scriptingscripting~10 mins

API interaction scripts in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - API interaction scripts
Start script
↓
Prepare API URL & data
↓
Send HTTP request with curl
↓
Receive response
↓
Check response status
↓
Process data
↓
End script
The script prepares the API request, sends it, checks the response, and processes or handles errors accordingly.
Execution Sample
Bash Scripting
url="https://api.agify.io?name=michael"
curl -s "$url" -o response.json
status=$?
if [ $status -eq 0 ]; then
  cat response.json
else
  echo "Request failed"
fi
This script calls an API to guess age by name, saves response, and prints it if successful.
Execution Table
StepActionCommand/CheckResult/Output
1Set API URLurl="https://api.agify.io?name=michael"url variable set
2Send HTTP GET requestcurl -s "$url" -o response.jsonresponse.json file created with API data
3Check curl exit statusstatus=$?status=0 (success)
4Condition checkif [ $status -eq 0 ]True branch taken
5Output response contentcat response.json{"name":"michael","age":69,"count":12345}
6End scriptfiScript ends normally
💡 curl command succeeds (exit status 0), so response is printed and script ends
Variable Tracker
VariableStartAfter Step 1After Step 3Final
urlunsethttps://api.agify.io?name=michaelhttps://api.agify.io?name=michaelhttps://api.agify.io?name=michael
statusunsetunset00
Key Moments - 2 Insights
Why do we check the variable 'status' after running curl?
Because 'status' holds curl's exit code; 0 means success. This check decides if we print the response or show an error (see execution_table step 3 and 4).
What happens if the API request fails?
If curl fails, 'status' is not 0, so the else branch runs and prints 'Request failed' (not shown in this run but implied by the if-else structure).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 3, what does the variable 'status' equal?
A1
B0
CUndefined
DCurl command
💡 Hint
Check the 'Result/Output' column at step 3 in the execution_table.
At which step does the script decide to print the API response?
AStep 4
BStep 5
CStep 2
DStep 6
💡 Hint
Look at the 'Condition check' step where the if statement chooses the branch.
If the curl command failed, what would the script output?
ANothing
BThe API response JSON
CRequest failed
DAn error code number
💡 Hint
Refer to the if-else logic in the execution_sample code and key_moments about failure handling.
Concept Snapshot
API interaction scripts in bash:
- Set API URL in a variable
- Use curl to send HTTP request
- Check curl exit status ($?)
- If success, process or print response
- Else, handle error (print message)
Simple, stepwise flow for reliable API calls.
Full Transcript
This visual execution shows a bash script that interacts with an API. First, it sets the API URL in a variable. Then it uses curl to send a GET request silently and saves the response to a file. After curl runs, the script checks its exit status stored in 'status'. If status is zero, meaning success, it prints the response content. Otherwise, it prints 'Request failed'. Variables 'url' and 'status' change as the script runs. Key moments include understanding why we check curl's exit status and what happens on failure. The quiz tests understanding of these steps and outcomes.

Practice

(1/5)
1. What is the primary tool used in bash scripts to interact with web APIs?
easy
A. sed
B. grep
C. awk
D. curl

Solution

  1. Step 1: Understand the purpose of each tool

    curl is used to send HTTP requests, while grep, awk, and sed are text processing tools.
  2. Step 2: Identify the tool for API interaction

    Since APIs communicate over HTTP, curl is the correct tool to send requests and receive responses.
  3. Final Answer:

    curl -> Option D
  4. Quick Check:

    API calls use curl [OK]
Hint: Remember: curl sends web requests in bash [OK]
Common Mistakes:
  • Confusing text tools like grep with API tools
  • Using sed or awk for HTTP requests
  • Thinking bash has a built-in HTTP client
2. Which of the following is the correct syntax to send a GET request to https://api.example.com/data using curl?
easy
A. curl https://api.example.com/data
B. curl --data https://api.example.com/data
C. curl -d https://api.example.com/data
D. curl -X POST https://api.example.com/data

Solution

  1. Step 1: Understand default curl behavior

    By default, curl sends a GET request if no method is specified.
  2. Step 2: Analyze options

    curl https://api.example.com/data sends a GET request simply by specifying the URL. The other options either specify POST or data, which changes the method.
  3. Final Answer:

    curl https://api.example.com/data -> Option A
  4. Quick Check:

    Default curl = GET request [OK]
Hint: No method means GET by default in curl [OK]
Common Mistakes:
  • Using -X POST when GET is needed
  • Adding -d or --data without POST method
  • Confusing GET and POST syntax
3. What will be the output of this script snippet?
response=$(curl -s -H "Accept: application/json" https://api.example.com/status)
echo "$response"
medium
A. An error message about missing POST data
B. The raw JSON response from the API
C. Nothing, because the script has a syntax error
D. The HTTP status code only

Solution

  1. Step 1: Understand the command

    The curl command uses -s for silent mode and sets the header to accept JSON. It fetches data from the API URL.
  2. Step 2: Analyze the output

    The response variable stores the full API response body, which is expected to be JSON. The echo prints this JSON string.
  3. Final Answer:

    The raw JSON response from the API -> Option B
  4. Quick Check:

    Silent curl with JSON header returns JSON [OK]
Hint: Silent curl (-s) returns response body only [OK]
Common Mistakes:
  • Expecting HTTP status code instead of body
  • Thinking -H sets request method
  • Assuming syntax error due to quotes
4. Identify the error in this script that sends JSON data to an API:
curl -X POST https://api.example.com/update -d '{"name":"John"}' -H 'Content-Type: application/json'
medium
A. The JSON data is not properly escaped
B. The -X POST option is missing
C. The Content-Type header should be text/plain
D. The URL is missing the protocol

Solution

  1. Step 1: Check JSON data quoting

    The JSON string uses double quotes inside single quotes, but the inner double quotes are escaped with backslashes, which is unnecessary and can cause errors in bash.
  2. Step 2: Correct quoting for JSON in bash

    Use single quotes around JSON without escaping double quotes, or use double quotes outside and escape inner quotes properly.
  3. Final Answer:

    The JSON data is not properly escaped -> Option A
  4. Quick Check:

    Proper JSON quoting avoids escape errors [OK]
Hint: Use single quotes around JSON to avoid escaping double quotes [OK]
Common Mistakes:
  • Over-escaping quotes inside JSON
  • Wrong Content-Type header
  • Omitting -X POST when sending data
5. You want to write a bash script that sends a POST request with JSON data and saves the HTTP status code to a variable. Which command correctly does this?
hard
A. status=$(curl -X POST https://api.example.com/api -d '{"key":"value"}' -H 'Content-Type: application/json')
B. status=$(curl -X POST -H 'Content-Type: application/json' https://api.example.com/api -d '{"key":"value"}')
C. status=$(curl -X POST -d '{"key":"value"}' -H 'Content-Type: application/json' https://api.example.com/api -w "%{http_code}" -o /dev/null -s)
D. status=$(curl -X POST -d '{"key":"value"}' https://api.example.com/api -H 'Content-Type: application/json' -i)

Solution

  1. Step 1: Understand how to capture HTTP status code

    The -w "%{http_code}" option tells curl to output the HTTP status code after the response. The -o /dev/null discards the response body, and -s silences progress.
  2. Step 2: Check command correctness

    status=$(curl -X POST -d '{"key":"value"}' -H 'Content-Type: application/json' https://api.example.com/api -w "%{http_code}" -o /dev/null -s) correctly uses all these options and assigns the status code to the variable. Other options either capture the response body or include headers, not just the status code.
  3. Final Answer:

    status=$(curl -X POST -d '{"key":"value"}' -H 'Content-Type: application/json' https://api.example.com/api -w "%{http_code}" -o /dev/null -s) -> Option C
  4. Quick Check:

    Use -w with -o /dev/null to get status code [OK]
Hint: Use curl -w with -o /dev/null to get only status code [OK]
Common Mistakes:
  • Capturing full response instead of status code
  • Missing -w option for status code
  • Not silencing output with -s
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard