Проект ресурса REST: Встраивание связанных данных VS, ссылающихся на него? - PullRequest
4 голосов
/ 19 февраля 2011

У меня есть система REST с ресурсами Article и Author. Как правило, при доступе к статье, я также хочу знать имя автора. Я могу создать статьи несколькими способами для достижения этой цели: A) встроить копию имени автора непосредственно в статью; или B) включить в Статью URI, который указывает на соответствующий ресурс Author.

Очевидно, что копирование имени автора прямо в ресурс Article явно имеет обратную сторону. Дублируя информацию в несколько ресурсов, я открываю себя для конфликтов между ресурсами. После того, как Автор обновляет свое имя, у ресурса Article может быть старое имя, а у ресурса Author - новое.

Возможно, если я не кеширую статьи, это не будет проблемой? Но с практической точки зрения быстрота и сокращение числа обращений к серверу крайне желательны, поэтому я стремлюсь к кэшированию в браузере.

В сценарии B связывание с использованием URI кажется правильным и намного более дружественным к кешу. Но это удваивает количество обращений к серверу: каждая статья требует второй (последовательной) выборки Автора. Таким образом, дорого по-другому, особенно если мы говорим о нескольких URI для нескольких других ресурсов. При одновременном отображении 50 статей это может сойти с ума.

Мне бы хотелось услышать, как другие решают эту проблему. Стоит ли читать эссе о «лучших практиках»?

1 Ответ

1 голос
/ 19 февраля 2011

linking ... удваивает количество обращений к серверу: каждая статья требует второй (последовательной) выборки Автора.

REST включает ограничения кеша именно по этой причине, что «вторая выборка» вообще не должна быть сделана , если данные уже находятся в вашем локальном кеше (или может быть запросом, который использует только частичные сетевые ресурсы, если кеш является посредником или на стороне сервера). Если ваши данные могут быть спроектированы таким образом, чтобы воспользоваться этим преимуществом, вы можете уменьшить общий сетевой трафик на порядки. Если это невозможно, то нет смысла применять архитектурный стиль REST, который зависит от кэширования для эффективности сети - выберите другой стиль, например RPC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...