Skip to main content

Transport-agnostic, typed error DTOs and envelopes for APIs

Project description

apierrors

Transport-agnostic, typed error DTOs and envelopes for APIs. Use the same domain error objects across HTTP, gRPC, GraphQL, WebSocket, JSON-RPC, and message queues—with first-class support for HTTP out of the box and a 422 format compatible with FastAPI.


Why

Framework built-ins (e.g., HTTPException) are convenient but hard-wire errors to one transport. apierrors keeps your domain errors independent and adds thin adapters per transport. Your handlers build rich, typed errors; adapters serialize them for the wire.


Features

  • Typed DTOs: Err400/401/403/404/405/409/422/... with critical fields (e.g., loc for 422, allowed_methods for 405, permission for 403).
  • Transport-agnostic core: domain errors don’t depend on HTTP.
  • HTTP envelopes: HttpErrorEnvelope[T] with status_code, optional headers.
  • FastAPI-style 422: Err422 supports loc, error_type (aka type), ctx, message (aka msg).
  • Consistent JSON: stable shape for clients & SDKs.
  • Headers helpers: easy WWW-Authenticate, Allow, Retry-After.
  • Adapters (extensible): examples for gRPC, GraphQL, WS.

Install

pip install apierrors

Python 3.11+.


Why not just HTTPException (FastAPI / Starlette)?

Aspect HTTPException apierrors
Transport HTTP-only Transport-agnostic domain errors + HTTP adapter
Typing/DTOs Message + status Rich typed DTOs per status (401, 403, 405, 409, 422…)
422 details Framework-controlled Explicit loc/error_type/ctx, same across transports
Headers Manual, ad-hoc DTO fields + helper factories (e.g., Allow, WWW-Authenticate)
Reuse in gRPC/GraphQL/WS No Yes, via adapters
Client SDKs Ad-hoc parsing Stable JSON shapes for codegen/SDKs
Testability Inspect exception Assert on DTO fields & envelopes

Bottom line: keep domain errors independent; adapt once per transport.


Comparison to other libs

  • Starlette / FastAPI exceptions: great for quick HTTP flows but hard-wire transport and shape; 422 format depends on framework internals. apierrors gives you the same clarity for 422 while remaining cross-transport.
  • DRF APIException / Marshmallow errors: framework-centric, tightly coupled to serializers/validators. apierrors can ingest their outputs and produce a consistent cross-transport error shape.
  • Werkzeug/HTTPX exceptions: HTTP-only and less prescriptive about rich detail.

Best practices

  • Build domain errors, not responses. Keep HTTP concerns at the edge.
  • Use specific DTOs. Prefer Err403(resource=..., action=..., permission=...) over a generic message.
  • 422 consistently. Use loc paths identical to your validator (("body","items",0,"price")).
  • Set headers via envelope. Mirror DTO fields into headers (e.g., Allow).
  • Log request_id. Populate for traceability; ship timestamp automatically.

Roadmap

  • More transports & adapters
    • gRPC error details (google.rpc.BadRequest / ErrorInfo)
    • GraphQL extensions & Apollo format
    • JSON-RPC 2.0 (code/message/data)
    • WebSocket/SSE payloads & close codes
    • Message buses (Kafka/RabbitMQ) error envelopes
  • RFC7807 adapter (Problem Details) with per-status extensions
  • Pydantic & Marshmallow bridges (auto-convert validation errors → Err422)
  • i18n: message translation hooks
  • Retry semantics: helpers for Retry-After, backoff hints
  • Codegen: JSON Schema for errors to power SDKs
  • 5xx suite: Err500..Err504 with incident/trace fields

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

apierrors-0.0.7.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

apierrors-0.0.7-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file apierrors-0.0.7.tar.gz.

File metadata

  • Download URL: apierrors-0.0.7.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.3

File hashes

Hashes for apierrors-0.0.7.tar.gz
Algorithm Hash digest
SHA256 dfb6a81adb948e1a9da2b0ca5243e3de1309537d00858c52d4bb4a41c3dc37a5
MD5 b807fb75dee2e9c57ee74e1f2aba3b65
BLAKE2b-256 26ebd037b20725c910eb407cc7474cfa3cfa44fa19239c41d142c36af3ffb86c

See more details on using hashes here.

File details

Details for the file apierrors-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: apierrors-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.3

File hashes

Hashes for apierrors-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 8b8984d1c2cfe64b84dde36c1c8b6119f441940ffd878e715edd65f39d5d4dc1
MD5 574a79f9ed6f62e0412efb27e861a12c
BLAKE2b-256 7591078a19437c601116c33c60f71acc1fdc8e3084ab1d7dadfa72813beb96e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page