Working with REST APIs
REST APIs follow conventions for CRUD operations. Learn endpoint patterns, response handling, pagination, and error handling.
20 min•By Priygop Team•Updated 2026
REST APIs
REST APIs
import json
# REST API conventions:
# GET /users → List all users
# GET /users/1 → Get user by ID
# POST /users → Create user
# PUT /users/1 → Update user
# DELETE /users/1 → Delete user
class RESTClient:
def __init__(self):
self.users = [
{"id": 1, "name": "Alice", "role": "admin"},
{"id": 2, "name": "Bob", "role": "user"},
{"id": 3, "name": "Charlie", "role": "user"},
]
def list_users(self, page=1, per_page=2):
start = (page - 1) * per_page
end = start + per_page
data = self.users[start:end]
return {
"data": data,
"page": page,
"total": len(self.users),
"pages": -(-len(self.users) // per_page)
}
def get_user(self, user_id):
for user in self.users:
if user["id"] == user_id:
return {"data": user, "status": 200}
return {"error": "Not found", "status": 404}
def create_user(self, data):
data["id"] = max(u["id"] for u in self.users) + 1
self.users.append(data)
return {"data": data, "status": 201}
# Demo
api = RESTClient()
# List with pagination
print("=== Page 1 ===")
page1 = api.list_users(page=1)
print(json.dumps(page1, indent=2))
# Get specific user
print("\n=== Get User 2 ===")
user = api.get_user(2)
print(json.dumps(user, indent=2))
# Create new user
print("\n=== Create User ===")
new = api.create_user({"name": "Diana", "role": "user"})
print(json.dumps(new, indent=2))
# Handle errors
print("\n=== Get User 99 ===")
result = api.get_user(99)
if result.get("status") == 404:
print(f"Error: {result['error']}")Tip
Tip
Always validate and sanitize API response data. Never trust external data — check types, ranges, and required fields.
Diagram
Loading diagram…
REST is the standard for modern web APIs
Common Mistake
Warning
Ignoring rate limits. Most APIs limit requests per minute/hour. Implement exponential backoff for retries.
Quick Quiz
Practice Task
Note
(1) Parse a nested JSON API response. (2) Handle missing fields with .get(). (3) Transform API data into a clean format.