Go to file
renovate[bot] 753b935b52
Update all non-major dependencies (#2)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-15 15:24:06 +07:00
.github 🔄 Synced file(s) with valitydev/configurations (#6) 2022-11-15 15:02:14 +07:00
proto TD-312: Use valitydev/thrift v0.14.2.3 (#14) 2022-06-22 18:44:49 +03:00
src TD-312: Use valitydev/thrift v0.14.2.3 (#14) 2022-06-22 18:44:49 +03:00
.gitignore Switch to public mavin repo (#6) 2020-08-04 11:31:44 +03:00
LICENSE Update file(s) from valitydev/.github 2022-02-22 11:35:02 +00:00
pom.xml Update all non-major dependencies (#2) 2022-11-15 15:24:06 +07:00
README.md Build impl 2022-01-10 16:44:09 +03:00
rebar.config TD-312: Use valitydev/thrift v0.14.2.3 (#14) 2022-06-22 18:44:49 +03:00
rebar.lock TD-312: Use valitydev/thrift v0.14.2.3 (#14) 2022-06-22 18:44:49 +03:00
renovate.json Update renovate config 2022-02-21 13:56:46 +03:00

bender-proto

An external identifier binding service protocol. Implemented by bender.

What?

Glad you asked. This protocol describes a service which deals with binding abstraction. A binding ties some external identifier (e.g. identifier of some object or process in some third-party system) with a single uniform and predictable internal identifier, and does this uniquely: there should no more than one such binding for each external identifier.

Why?

  • You want to guarantee idempotency of your system.

    You should tell your clients to include some form of external identifier or idempotency key when interacting with your system's API. This service will make sure that you'll end up with the same internal identifier, no matter how many identical requests you end up receiving.

  • ...And also you want predictable identifiers.

    In other words you want to have, for example, plain 64-bit counter for an identifier internally, no matter how diverse your clients' identifiers are.

  • ...And also you want to spot conflicting requests with same external identifiers.

    For that you might compute, for example, some stable hash of the request data and associate it with a binding as a context. Service guarantees that only the first actor who actually creates a binding (the winner) will have its context persisted. Other actors will see winner's context in service responses.