📖 Scenario: You are building a simple web service using FastAPI. To make sure your service is running well, you want to add health check endpoints. These endpoints will let other systems ask if your service is alive and ready to handle requests.
🎯 Goal: Create a FastAPI app with two health check endpoints: /health/alive and /health/ready. The /health/alive endpoint will confirm the app is running. The /health/ready endpoint will confirm the app is ready to serve requests.
📋 What You'll Learn
Create a FastAPI app instance named app
Add a GET endpoint at /health/alive that returns JSON {"status": "alive"}
Add a GET endpoint at /health/ready that returns JSON {"status": "ready"}
Use proper FastAPI route decorators and response models
💡 Why This Matters
🌍 Real World
Health check endpoints are used by monitoring tools and load balancers to verify if a web service is running and ready to accept traffic.
💼 Career
Knowing how to create health check endpoints is essential for backend developers and DevOps engineers to ensure reliable and maintainable web services.
Progress0 / 4 steps
1
Create FastAPI app instance
Import FastAPI from fastapi and create an app instance called app.
FastAPI
Hint
Use FastAPI() to create the app instance and assign it to app.
2
Add /health/alive endpoint
Add a GET endpoint at /health/alive using @app.get decorator. The endpoint function should be named health_alive and return {"status": "alive"}.
FastAPI
Hint
Use @app.get("/health/alive") to create the route and return the JSON dictionary.
3
Add /health/ready endpoint
Add a GET endpoint at /health/ready using @app.get decorator. The endpoint function should be named health_ready and return {"status": "ready"}.
FastAPI
Hint
Use @app.get("/health/ready") and return the JSON dictionary with status ready.
4
Complete FastAPI app with both endpoints
Ensure the FastAPI app has both /health/alive and /health/ready GET endpoints defined with correct function names and return values.
FastAPI
Hint
Review your code to confirm both endpoints are present and correct.
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
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.
Step 2: Identify the correct purpose
They do not handle authentication, serve files, or migrate databases but confirm app responsiveness.
Final Answer:
To confirm the app is running and responsive -> Option C
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
Step 1: Recall FastAPI syntax for endpoints
FastAPI uses decorators like @app.get('/path') above the function to define GET endpoints.
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.
Final Answer:
@app.get('/health')\ndef health():\n return {'status': 'ok'} -> Option A
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?
The return line uses 'return status: 'ok'' which is invalid Python syntax; it should be a dictionary like {'status': 'ok'}.
Step 2: Check other parts for correctness
The decorator @app.get is correct, function name can be anything, and app instance is created properly.
Final Answer:
Syntax error in return statement -> Option B
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
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.
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.
Final Answer:
Use try-except inside the endpoint to check DB, return JSON with status code accordingly -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.