ADR-0003: Same REST API in .NET, Go and C++ behind Nginx

July 28, 2026 ยท View on GitHub

  • Status: accepted
  • Date: 2026-07-28

Context

Portfolio project whose goal is to demonstrate system design skills and language breadth. There is one reminders REST contract; the question is how many implementations to maintain and how clients reach them.

Options considered

Option 1: Single .NET API

Least maintenance, one deploy target, one place to evolve the contract. Shows depth in one stack but no cross-language comparison, which is a core goal of the portfolio.

Option 2: Multiple implementations behind a load balancer

Same contract implemented in .NET, Go and C++, with Nginx balancing across them. Demonstrates polyglot backend skills and real load balancing. Costs: every contract change lands three times, and behavior drift between implementations must be watched.

Decision

Option 2. dotnet-api (5000), go-api (5001) and cpp-api (5002) serve the same REST contract; Nginx (9999) load balances across them. The .NET implementation is the reference and carries the full feature set, including blockchain integration.

Consequences

  • Easier: comparing stacks side by side; demonstrating infra skills (load balancing, health checks, compose profiles).
  • Harder: triple cost for contract changes; parity gaps as Go and C++ trail the .NET reference.
  • Watch: clients must route through Nginx and never depend on implementation-specific behavior.