Сколько данных мы говорим?
Мое первое предложение, которое может не соответствовать вашему API, - это использовать шаблон проектирования команд для отправки и получения данных. Это обеспечивает гибкость добавления или изменения функциональности без необходимости изменения уровня связи, особенно если вы можете загружать новые команды через плагины. Однако вряд ли это будет хорошо работать для плагинов, сделанных клиентом.
Возможно ли для небольших объемов данных позволить клиенту создать файл CSV или XML, сохранить его на сервере и запросить копию при необходимости? Затем вы можете загрузить это в DataTable или аналогичную структуру для выполнения запросов на клиенте. Вы можете сохранить любые изменения, внесенные в данные, и отправить их обратно на сервер, когда клиент покончит с ними. Преимущество этого заключается в том, что клиент может указать данные, которые он хочет, и то, как он хочет их сохранить, а серверные компоненты не заботятся.
Для больших объемов данных ... без понятия. У меня есть опыт создания таблиц метаданных и создания описываемых ими таблиц, а также построения структуры запросов, но я сомневаюсь, что это лучшее решение. Вещи, как правило, быстро запутываются - справочные таблицы, отношения «многие ко многим», каскадные справочные таблицы, иерархии и т. Д. Я бы тщательно подумал о том, какие требования к данным у вас будут, прежде чем идти по этому пути.
Если вы не ограничены в SQL для данных, вы можете рассмотреть возможность использования чего-то вроде RavenDB (или другого решения NoSQL) для хранения их данных. Пока они могут сериализовать объекты для отправки на ваш сервер, вы можете хранить их в базе данных. Отправка запросов на сервер может быть проблемой (хотя я точно не знаю).