CQRS

CQRS (The Command and Query Responsibility Segregation) – архитектурный принцип, когда api делится на 2 части:

  • запросы (без изменения данных)
  • изменение данных (без отдачи данных, возможно только id созданного объекта, если он не передавался, а генерируется сервером)

Понятно, что при таком разделении есть несколько плюсов:

  • можно отдельно масштабировать части приложения на чтение и запись
  • проще кешировать данные
  • меньше изменений в api и они более точечные – не нужно строить все варианты изменения и отдачи данных в запросах

И минус:

  • нужно делать несколько запросов, если сразу после изменения хочется получить какие-то измененные данные

Отдельно скажу, что сам по себе CQRS не говорит от том что должно произойти, когда сразу после изменения будет запрос на чтение данных: обязана ли система всегда вернуть новые данные или допустим какой-то лаг на синхронизацию.

GraphQL имеет встроенную поддержку CQRS. Там это называется query и mutation.

CQRS себя показывает хорошо, особенно в связке с GraphQL – когда каждое место вызова может получить те данные, которые нужны.

Как дополнительный материал могу порекомендовать https://cqrs.nu/faq – краткие емкие вопросы-ответы.