CQRS (The Command and Query Responsibility Segregation) – архитектурный принцип, когда api делится на 2 части:
- запросы (без изменения данных)
- изменение данных (без отдачи данных, возможно только id созданного объекта, если он не передавался, а генерируется сервером)
Понятно, что при таком разделении есть несколько плюсов:
- можно отдельно масштабировать части приложения на чтение и запись
- проще кешировать данные
- меньше изменений в api и они более точечные – не нужно строить все варианты изменения и отдачи данных в запросах
И минус:
- нужно делать несколько запросов, если сразу после изменения хочется получить какие-то измененные данные
Отдельно скажу, что сам по себе CQRS не говорит от том что должно произойти, когда сразу после изменения будет запрос на чтение данных: обязана ли система всегда вернуть новые данные или допустим какой-то лаг на синхронизацию.
GraphQL имеет встроенную поддержку CQRS. Там это называется query и mutation.
CQRS себя показывает хорошо, особенно в связке с GraphQL – когда каждое место вызова может получить те данные, которые нужны.
Как дополнительный материал могу порекомендовать https://cqrs.nu/faq – краткие емкие вопросы-ответы.