featherweb

Every button below hits the running server. Responses land in the panel under each card.

Status: checking…

Input and output from type hints

GET/api/tasks
GET/api/tasks/{id}
GET/api/tasks/echo/headers
–
POST/api/tasks

The handler takes a dataclass, so the body is validated against it.

–

Streaming and files

GET/api/files/stream

Chunked: the lines appear one at a time, not all at the end.

–
GET/api/files/download
–
POST/api/files/upload

Parsed as it arrives and spooled to disk past 1 MB — try a large file.

–

WebSocket

/ws/echo
not connected
/ws/clock the server pushes without being asked
–

Authentication

POST/api/auth/login

Logged out, a guarded route is 401 with a WWW-Authenticate. Logged in without the role it is 403 — the difference being whether retrying with credentials would help. The session rides in a signed cookie you can read in devtools but cannot edit.

–
JWT

This app authenticates by session; these buttons are a playground for the token layer. A changed character breaks the signature, and an expired token is refused even though its signature is perfectly good.

–

Errors

–

Static files

–