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.4.tar.gz (12.9 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.4-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: apierrors-0.0.4.tar.gz
  • Upload date:
  • Size: 12.9 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.4.tar.gz
Algorithm Hash digest
SHA256 74e3373a50d998d5a93b7e9a510860ffef7730c2c877d6ca43a5f4cab9a01703
MD5 513fffd0307b51aa4c363d37b7f65964
BLAKE2b-256 92cd9951973785264212135b78bb0c12fbb4d1e9a460a450c8ab974fbab26ef1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: apierrors-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 15.9 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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 cf68c19e41bb27e60b1a8fd382a4b268fed671dbbaa89ec20722d27e50fef3b7
MD5 a9573499824ee934466ed78a3faf6835
BLAKE2b-256 4f63931fdb34ec0a00426a75918e491432482d051169d5611a33b123ba6be7a8

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