PostgREST-like
RPC Search Engine.
Stop writing boiler-plate search controllers. GO-DUCK generates an high-performance, unified RPC layer for deep, transactional querying across your multi-silo empire.
Pure Full-Text Search
Native Elasticsearch engine for sub-millisecond fuzzy matching on millions of records.
Transactional RPC
Dynamic, server-side filtering with ?filter=eq.val directly on your GORM models.
Postgres Arrow Power
Query your JSONB fields using Postgres arrow operators (->, ->>) in your URI.
API Reference & Endpoint Map
| Verb | Endpoint Pattern | Discovery Power |
|---|---|---|
| GET | /api/search/{entity}?q=keyword | Elite Elasticsearch Fuzzy Search |
| GET | /api/v1/{entity} | List and Search with GORM Filter Logic |
| POST | /api/v1/{entity} | Atomic Primary Write + Saga Multi-Broadcast |
| PATCH | /api/v1/{entity}/{id} | Partial Update (Single Silo or Global) |
| DELETE | /api/v1/{entity}/{id} | Distributed Atomic Deletion |
| POST | /api/v1/{entity}/bulk | Bulk Multi-Silo Transaction |
Silo Precision: Transactional Isolation
While GO-DUCK defaults to global federation, sometimes you need surgical precision. Our Dual-Path Orchestrator is controlled by your headers.
Federal Broadcast (Default)
Headers: Empty
Writes synchronize to all silos. Reads aggregate data from the entire dealership empire into a single view.
Silo Narrowing (Precision)
X-Tenant-ID: {Opaque-Silo-ID}
Bypasses federation. Reads and writes are isolated to ONLY that specific silo. Perfect for site-specific audits or sensitive data entries.
Industrial Velocity: Bulk Operations
For high-velocity data ingestion, GO-DUCK generates transaction-aware Bulk Endpoints. A single request can mutate thousands of records across your silos.
Endpoint: POST /api/v1/{entity}/bulk
Payload: Array of Objects
[
{ "make": "Tesla", "model": "Model S" },
{ "make": "Lucid", "model": "Air" }
]
Atomic & Federated
Bulk operations are wrapped in a database transaction. If one record fails validation or insertion, the entire batch is rolled back across all Silos.
Relational Intelligence: Eager Loading
By default, GO-DUCK uses Lazy Loading to keep responses lightweight. However, you can toggle relational graph expansion using our intelligent URI flags.
Eager Expansion (?eager=true)
Recursively loads all 1:m and m:1 relationships defined in your GDL. Perfect for building complex dashboard views in a single call.
GET /api/v1/car/1?eager=true
Lazy Defaults
Returns only the primary entity fields. Relationships remain hydrated as IDs, reducing bandwidth and database overhead.
GET /api/v1/car/1