Вопрос в том, есть ли что-то неправильное в том, чтобы все вызовы (GET / POST / PUT / DELETE) возвращали общую модель данных, у которой есть вложенный объект, который имеет сериализованный ресурс, где это необходимо.
Краткий ответ: Нет.
Несколько более длинный ответ: нет, не в идеальных условиях. Но и в этом случае нет ничего невозможного.
Всемирная паутина - эталонное приложение для архитектурного стиля REST. HTML-документы обычно доставляются как представления ресурсов, и, вероятно, вы заметили, что в HTML-документе может быть значительное количество ... церемоний? ..., которые не имеют прямого отношения к состоянию ресурса.
И давайте посмотрим правде в глаза - независимо от того, каково ваше представление, само это представление внедряется в HTTP-сообщение, несущее свои собственные метаданные.
Важно то, что клиент и сервер имеют общее понимание семантики представления. Еще лучше, если бы это общее понимание было разработано таким образом, чтобы его можно было легко расширить с помощью метода обратной совместимости.
Архитектурно, ресурсы не ограничены одним и только одним представлением. Таким образом, вы можете выбрать поддержку application/json
и application/prs.my-custom-app+json
, предоставляя более богатую реализацию тем клиентам, которые достаточно воспитаны, чтобы попросить об этом.
Предполагаете ли вы, что если заголовок "Accept" был указан только для "application / json", ответом будет ожидаемая модель ресурса, например, SportModel. Где, как «application / pry.my-custom-app + json» возвращает модель «TransactionResult»?
Да, точно так же, как клиент, запрашивающий text/plain
, может получить другое представление ресурса, чем клиент, запрашивающий text/html
.
Вот комментарий 2008 от Роя Филдинга , который может дать вам более четкое представление о том, откуда это исходит
API REST должен потратить почти все свои описательные усилия на определение типов носителей, используемых для представления ресурсов и управления состоянием приложения, или на определение расширенных имен отношений и / или разметки с поддержкой гипертекста для существующих стандартных носителей. типы. Любое усилие, затрачиваемое на описание того, какие методы использовать с какими интересующими URI, должно быть полностью определено в рамках правил обработки для типа носителя (и, в большинстве случаев, уже определено существующими типами носителя). [Ошибка здесь подразумевает, что внешняя информация является движущей силой взаимодействия, а не гипертекста.]