---
title: Separate Parsing from Controllers
impact: MEDIUM
impactDescription: improves clarity and reuse of logic
tags: architecture, controller, quality, python
---

## Separate Parsing from Controllers

In web apps (Flask/FastAPI), separate input validation/parsing from the main request logic.

**Incorrect:**
```python
@app.route('/user')
def get_user():
    user_id = request.args.get('id')
    if not user_id or len(user_id) < 5:
        return "Invalid ID", 400
    # ... business logic ...
```

**Correct:**
```python
def parse_user_id(args):
    user_id = args.get('id')
    if not user_id or len(user_id) < 5:
        raise InvalidInputError()
    return user_id

@app.route('/user')
def get_user():
    user_id = parse_user_id(request.args)
    # ... business logic ...
```
