2013-04-12 5 views
4

Предположим, у меня есть ресурс user_stats, который имеет такие вещи, как количество сообщений, комментариев, понравлений и подписчиков. Есть ли способ RESTful запрашивать только части этой статистики (например, для user_stats/3, расскажите, сколько сообщений и комментариев у этого пользователя есть, но не говорите мне, сколько у этого пользователя этого пользователя.)RESTful способ запросить подмножество ресурса

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

ответ

6

Существует очень useful 38 page free ebook с лучшими практиками проектирования веб-интерфейсов, вам может показаться полезным, по крайней мере, я это сделал.

В вашем случае, говорится:

Добавить дополнительные поля в запятую

Подход Google работает очень хорошо.

Вот как получить только ту информацию, нам нужно от наших собак API, используя этот подход:

/dogs?fields=name,color,location

Это просто для чтения; разработчик может выбрать только информацию, необходимую для приложения в определенное время; он сокращает проблемы с пропускной способностью, что составляет , что важно для мобильных приложений. Синтаксис частичного выбора также может использоваться для включения связанных ресурсов, сокращающих количество запросов, необходимых для получения требуемой информации.

Возможно, это то, что вы ищете?

+0

Спасибо! Отличная книга тоже! – Max

3

существует по крайней мере три варианта:

  1. Используйте параметр запроса в качестве фильтра

    например user_stats? = поля сообщения, комментарии

  2. сделать user_stats композитного ресурса и создавать новые ресурсы для конкретного стата

    например/user_stats в формате JSON

    { 
        "blogs" : { 
         "count" : 10, 
         "link" : "/user_stats_blobs" 
        }, 
        ... 
    } 
    

    , то вы можете получить всю статистика (GET/user_stats) или просто кусок (GET/user_stats_blobs)

  3. Создать представление фильтра; используйте сообщение POST для отправки фильтра в виде части запроса

    например. Запрос POST/user_stats/фильтр

    { 
        "fields" : [ "blogs", ...] 
    } 
    

    тело ответа содержит запросил/отфильтрованные данные.

Все решения RESTful. Решение 1. легко реализовать, но имеет ограниченную расширяемость и прозрачность. Решение 2.ожидает, что в этом случае вы создадите новые ресурсы, которые являются накладными расходами (вам нужно всего одно число). поэтому я бы рекомендовал решение 3. потому что его не так сложно реализовать, он легко расширяется и прозрачен.

Смежные вопросы