For my personal software I design all my APIs as JSON objects, using TypeScript interfaces for their definitions, and I associate those objects to a service name. So data will look like a parent object with properties data and service where data is the defined JSON payload and service is the name of that data schema. This allows me to use a WebSocket connection for all my various services and it’s so much faster.