Bird
Raised Fist0
FastAPIframework~10 mins

Health check endpoints in FastAPI - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Health check endpoints
Start FastAPI app
↓
Define /health endpoint
↓
Receive HTTP GET request at /health
↓
Run health check logic
↓
Return JSON response with status
↓
Client receives status response
The app starts, defines a /health endpoint, listens for GET requests, runs checks, and returns a status JSON.
Execution Sample
FastAPI
from fastapi import FastAPI
app = FastAPI()

@app.get("/health")
async def health_check():
    return {"status": "ok"}
Defines a simple health check endpoint that returns a JSON with status 'ok' when accessed.
Execution Table
StepActionInputProcessOutput
1Start FastAPI appN/AApp initializes and listens for requestsApp ready
2Receive GET requestGET /healthRoute matches /health endpointInvoke health_check function
3Execute health_checkNo parametersReturn JSON {"status": "ok"}{"status": "ok"}
4Send response{"status": "ok"}HTTP 200 with JSON bodyClient receives JSON
5EndN/ARequest handled successfullyReady for next request
💡 Request completes after sending JSON response with status 'ok'
Variable Tracker
VariableStartAfter RequestFinal
appFastAPI instance createdRunning and listeningRunning and listening
requestNoneGET /health receivedHandled and response sent
responseNoneNone{"status": "ok"}
Key Moments - 2 Insights
Why does the endpoint return a JSON with {"status": "ok"} instead of plain text?
The execution_table row 3 shows the function returns a JSON dictionary, which FastAPI automatically converts to JSON response for clients.
What happens if a request is sent to a different path than /health?
The app will not match the route, so no health_check function runs. This is implied by execution_table row 2 where only GET /health triggers the function.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output at step 3?
APlain text 'ok'
BHTTP 404 Not Found
C{"status": "ok"}
DEmpty response
💡 Hint
Check the 'Output' column in row 3 of the execution_table
At which step does the app receive the GET /health request?
AStep 2
BStep 4
CStep 1
DStep 5
💡 Hint
Look at the 'Action' and 'Input' columns in the execution_table
If the health_check function returned {"status": "fail"}, how would the output at step 3 change?
A{"status": "ok"}
B{"status": "fail"}
CHTTP 500 Internal Server Error
DNo output
💡 Hint
Refer to the 'Process' and 'Output' columns in step 3 of the execution_table
Concept Snapshot
FastAPI health check endpoint:
- Define with @app.get('/health')
- Async function returns JSON status
- Client sends GET /health
- Server responds with JSON {"status": "ok"}
- Used to verify app is running
Full Transcript
This visual execution shows how a FastAPI app defines a health check endpoint at /health. When the app starts, it listens for HTTP requests. Upon receiving a GET request at /health, it runs the health_check function which returns a JSON response with status 'ok'. This response is sent back to the client, confirming the app is running properly. Variables like app, request, and response change state during this process. Key points include understanding the JSON response and route matching. The quiz tests knowledge of the output and request handling steps.

Practice

(1/5)
1. What is the main purpose of a health check endpoint in a FastAPI application?
easy
A. To serve static files like images
B. To handle user authentication
C. To confirm the app is running and responsive
D. To perform database migrations

Solution

  1. Step 1: Understand the role of health check endpoints

    Health check endpoints are simple URLs that tell if the app is alive and working properly.
  2. Step 2: Identify the correct purpose

    They do not handle authentication, serve files, or migrate databases but confirm app responsiveness.
  3. Final Answer:

    To confirm the app is running and responsive -> Option C
  4. Quick Check:

    Health check = Confirm app alive [OK]
Hint: Health check endpoints confirm app is alive and responsive [OK]
Common Mistakes:
  • Confusing health check with authentication endpoints
  • Thinking health check serves files
  • Assuming health check runs database tasks
2. Which of the following is the correct way to define a simple health check endpoint in FastAPI?
easy
A. @app.get('/health') def health(): return {'status': 'ok'}
B. app.route('/health', method='GET')(def health(): return 'ok')
C. app.get('/health')(def health(): return {'status': 'ok'})
D. def health(): return {'status': 'ok'} app.get('/health', health)

Solution

  1. Step 1: Recall FastAPI syntax for endpoints

    FastAPI uses decorators like @app.get('/path') above the function to define GET endpoints.
  2. Step 2: Check each option's syntax

    @app.get('/health') def health(): return {'status': 'ok'} correctly uses @app.get decorator and defines a function returning JSON. Others have syntax errors or wrong decorator usage.
  3. Final Answer:

    @app.get('/health')\ndef health():\n return {'status': 'ok'} -> Option A
  4. Quick Check:

    Use @app.get decorator for GET endpoints [OK]
Hint: Use @app.get decorator above function for GET endpoints [OK]
Common Mistakes:
  • Using app.get() as a function call instead of decorator
  • Wrong decorator syntax or missing @
  • Returning string instead of JSON/dict
3. Given this FastAPI health check endpoint code, what will be the JSON response when accessed?
@app.get('/health')
def health():
    return {'status': 'healthy', 'uptime': 12345}
medium
A. 500 Internal Server Error
B. {"status": "ok"}
C. 404 Not Found
D. {"status": "healthy", "uptime": 12345}

Solution

  1. Step 1: Analyze the return value of the endpoint

    The function returns a dictionary with keys 'status' and 'uptime' and their values.
  2. Step 2: Understand FastAPI response conversion

    FastAPI converts dict returns to JSON automatically, so the response will be JSON with those keys and values.
  3. Final Answer:

    {"status": "healthy", "uptime": 12345} -> Option D
  4. Quick Check:

    Dict return becomes JSON response [OK]
Hint: Returned dict becomes JSON response automatically [OK]
Common Mistakes:
  • Expecting string instead of JSON
  • Confusing status code with response body
  • Assuming error without code issues
4. What is wrong with this FastAPI health check endpoint code?
from fastapi import FastAPI
app = FastAPI()

@app.get('/health')
def health():
    return status: 'ok'
medium
A. Missing @app.post decorator
B. Syntax error in return statement
C. Function name must be 'health_check'
D. FastAPI app instance not created

Solution

  1. Step 1: Inspect the return statement syntax

    The return line uses 'return status: 'ok'' which is invalid Python syntax; it should be a dictionary like {'status': 'ok'}.
  2. Step 2: Check other parts for correctness

    The decorator @app.get is correct, function name can be anything, and app instance is created properly.
  3. Final Answer:

    Syntax error in return statement -> Option B
  4. Quick Check:

    Return dict with braces, not 'key: value' alone [OK]
Hint: Return a dict with braces, not 'key: value' alone [OK]
Common Mistakes:
  • Writing return without braces for dict
  • Using wrong decorator for GET endpoint
  • Assuming function name is fixed
5. You want to create a health check endpoint in FastAPI that returns HTTP 200 with JSON {'status': 'ok'} if the app is healthy, but HTTP 503 with {'status': 'unhealthy'} if a database connection fails. Which approach correctly implements this?
hard
A. Use try-except inside the endpoint to check DB, return JSON with status code accordingly
B. Always return {'status': 'ok'} and rely on external monitoring for DB status
C. Create two endpoints: one for app status and one for DB status, no status codes
D. Raise an exception if DB fails, FastAPI returns 500 automatically

Solution

  1. Step 1: Understand the requirement for conditional response

    The endpoint must check DB health and respond with different JSON and HTTP status codes based on that.
  2. Step 2: Evaluate options for handling DB check and response

    Use try-except inside the endpoint to check DB, return JSON with status code accordingly uses try-except to check DB and returns JSON with correct status codes, matching the requirement. Others either ignore DB status or do not set proper codes.
  3. Final Answer:

    Use try-except inside the endpoint to check DB, return JSON with status code accordingly -> Option A
  4. Quick Check:

    Use try-except and return JSON with status codes [OK]
Hint: Use try-except and return JSON with proper HTTP status codes [OK]
Common Mistakes:
  • Ignoring database health in the endpoint
  • Not setting HTTP status codes explicitly
  • Relying on default 500 instead of 503 for service unavailable
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