Skip to content

feat: add idempotency key support for POST and PATCH requests#8

Merged
sandervanhooft merged 1 commit intomainfrom
sandervanhooft/check-idempotency
Apr 8, 2026
Merged

feat: add idempotency key support for POST and PATCH requests#8
sandervanhooft merged 1 commit intomainfrom
sandervanhooft/check-idempotency

Conversation

@sandervanhooft
Copy link
Copy Markdown
Member

Summary

  • Adds automatic Idempotency-Key header generation for all POST and PATCH requests, on by default via DefaultIdempotencyKeyGenerator
  • Supports manual override (setIdempotencyKey()), per-request keys via endpoint filters ('idempotencyKey' => '...'), custom generators (setIdempotencyKeyGenerator()), and disabling (clearIdempotencyKeyGenerator())
  • Idempotency classes live under Vatly\API\HttpClient\Idempotency namespace alongside existing HTTP client code
  • Manual keys auto-reset after each request; generator keys are produced fresh each time
  • Includes FakeIdempotencyKeyGenerator for testing, used in BaseTestCase to keep existing tests deterministic

Test plan

  • DefaultIdempotencyKeyGeneratorTest — generates 16-char strings, unique across calls
  • VatlyApiClientIdempotencyTest — auto-generation on POST, manual override, auto-reset, no header on GET/DELETE, clearing generator, per-request headers
  • CheckoutEndpointTest — per-request idempotency key via create filters
  • SubscriptionEndpointTest — per-request idempotency key via update filters
  • All 70 tests pass

Every mutating request (POST/PATCH) automatically gets a generated
Idempotency-Key header by default. Supports manual override via
setIdempotencyKey(), per-request keys via endpoint filters, custom
generators, and disabling via clearIdempotencyKeyGenerator().
@sandervanhooft sandervanhooft merged commit 1b56329 into main Apr 8, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant