Lesson 14 of 20

Working with APIs

The Requests Library

3 min read

The requests library makes HTTP calls simple and Pythonic. It's the foundation for interacting with web APIs.

Installation

pip install requests

Making GET Requests

import requests

# Simple GET request
response = requests.get("https://api.github.com/users/octocat")

# Check if successful
if response.status_code == 200:
    data = response.json()
    print(data["name"])

Making POST Requests

import requests
import json

url = "https://api.openai.com/v1/chat/completions"

headers = {
    "Authorization": "Bearer sk-your-key",
    "Content-Type": "application/json"
}

data = {
    "model": "gpt-4",
    "messages": [
        {"role": "user", "content": "Hello!"}
    ]
}

response = requests.post(url, headers=headers, json=data)
result = response.json()
print(result["choices"][0]["message"]["content"])

Response Object

response = requests.get("https://api.example.com/data")

# Status information
response.status_code      # 200
response.ok               # True (if 200-299)
response.reason           # "OK"

# Content
response.text             # Raw text response
response.json()           # Parse as JSON (returns dict)
response.content          # Raw bytes

# Headers
response.headers          # Response headers dict
response.headers["Content-Type"]

Handling Errors

import requests

try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()  # Raises exception for 4xx/5xx
    data = response.json()
except requests.Timeout:
    print("Request timed out")
except requests.HTTPError as e:
    print(f"HTTP error: {e}")
except requests.RequestException as e:
    print(f"Request failed: {e}")

Common Options

# Timeout (important for reliability)
response = requests.get(url, timeout=30)

# Query parameters
response = requests.get(url, params={"page": 1, "limit": 10})
# Results in: url?page=1&limit=10

# Custom headers
response = requests.get(url, headers={"User-Agent": "MyApp/1.0"})

# JSON body (automatically serializes)
response = requests.post(url, json={"key": "value"})

Practical AI Example

import requests
import os

def chat_completion(prompt, model="gpt-4"):
    """Make a chat completion request to OpenAI."""
    url = "https://api.openai.com/v1/chat/completions"

    headers = {
        "Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}",
        "Content-Type": "application/json"
    }

    data = {
        "model": model,
        "messages": [{"role": "user", "content": prompt}],
        "temperature": 0.7
    }

    response = requests.post(url, headers=headers, json=data, timeout=60)
    response.raise_for_status()

    return response.json()["choices"][0]["message"]["content"]

# Usage
answer = chat_completion("What is Python?")
print(answer)

Next, we'll learn about proper API authentication patterns. :::

Quiz

Module 4: Working with APIs

Take Quiz