Skip to main content

REST API with Flask

Hacker’s Gateway

Imagine you’re a hacker building a system that needs to share data with the outside world. Instead of exposing raw files or databases, you create a gateway: a REST API. It’s like a controlled portal where clients can request information or trigger actions.

Python frameworks like Flask and FastAPI make building APIs simple, fast, and scalable. Flask is lightweight and flexible, while FastAPI is modern, high‑performance, and built for async operations.


Why REST APIs Matter

  • REST (Representational State Transfer): A standard for building web services.
  • HTTP Methods:
    • GET → retrieve data
    • POST → create data
    • PUT → update data
    • DELETE → remove data
  • Flask: Minimal, easy to learn, great for small APIs.
  • FastAPI: High‑performance, async‑friendly, automatic docs with Swagger/OpenAPI.
  • Real‑World Analogy: Like a hacker’s controlled gateway - only authorized requests pass through, and responses are structured.

REST API with Flask

from flask import Flask, request, jsonify

app = Flask(__name__)

# In-memory database
users = {"1": {"name": "Alice"}, "2": {"name": "Bob"}}

@app.route("/users", methods=["GET"])
def get_users():
    return jsonify(users)

@app.route("/users/<id>", methods=["GET"])
def get_user(id):
    return jsonify(users.get(id, {}))

@app.route("/users", methods=["POST"])
def add_user():
    data = request.json
    user_id = str(len(users) + 1)
    users[user_id] = data
    return jsonify({"id": user_id, "data": data}), 201

if __name__ == "__main__":
    app.run(debug=True)
  • Why? Flask makes it easy to spin up a REST API with minimal code.

REST API with FastAPI

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    name: str

users = {"1": {"name": "Alice"}, "2": {"name": "Bob"}}

@app.get("/users")
def get_users():
    return users

@app.get("/users/{id}")
def get_user(id: str):
    return users.get(id, {})

@app.post("/users")
def add_user(user: User):
    user_id = str(len(users) + 1)
    users[user_id] = user.dict()
    return {"id": user_id, "data": user.dict()}
  • Why? FastAPI provides automatic validation, async support, and auto‑generated docs (/docs).

Real‑World Example

API for Log Analyzer

# FastAPI example exposing log analyzer results
from fastapi import FastAPI
import re

app = FastAPI()

@app.get("/logs/errors")
def get_errors():
    with open("system.log") as f:
        logs = f.readlines()
    errors = [line for line in logs if "ERROR" in line]
    return {"errors": errors}
  • Why? Exposes log analysis results as an API endpoint for monitoring tools.

Best Practices

  • Use authentication: Protect APIs with tokens or OAuth.
  • Validate input: Prevent bad data with schemas (Pydantic in FastAPI).
  • Use versioning: /api/v1/ ensures backward compatibility.
  • Document APIs: FastAPI auto‑generates docs; Flask can use Swagger.
  • Deploy with containers: Dockerize APIs for reproducibility.

The Hacker’s Notebook

  • REST APIs are gateways for structured communication between systems. Flask is lightweight and flexible; FastAPI is modern and high‑performance.
  • APIs use HTTP methods (GET, POST, PUT, DELETE) for CRUD operations. Real‑world APIs integrate with monitoring, automation, and cloud workflows.

Hacker’s Mindset: treat APIs as your controlled gateways. They expose power safely, enabling integration with the outside world.


Tips, Tricks, Roadmaps, Resources, Networking, Motivation, Guidance, and Cool Stuff ♥

Updated on Jan 3, 2026