arturich
@arturich

Фильтрация в GET в RESTful

Всем привет! Меня давно мучает вопрос:

допустим у приложения REST api, допустим оно поддерживает запросы вроде этого:

GET /rest-api/models/?idModel=1,2,3,4,5,6,...

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

Проблема
А что, если id-шников в get запросе слишком много, или у меня в приложении они десятизначные — в GET не так много может уместиться. Получается в угоду RESTful принципам я должен ухудшить производительность? Вроде звучит как бред — тот же POST запрос, имеющий в теле id-шники будет куда круче.

Что скажет общественность?
  • Вопрос задан
  • 7264 просмотра
Решения вопроса 1
EugeneOZ
@EugeneOZ
Получается в угоду RESTful принципам я должен ухудшить производительность?

Да. Производительность никогда не была сильной стороной REST. Время, затраченное на открытие соединения, часто гораздо выше, чем время ответа. Для производительности используйте RPC.

тот же POST запрос, имеющий в теле id-шники будет куда круче

Не делайте исключений в стандартах. Потом из этих кривых кусочков построится такое чудовище, что его невозможно будет поддерживать. Потому что «тут вот как в стандарте таком-то, но только по-другому, поэтому это надо помнить и со стандартными тулзами оно не совместимо и без документации его лучше не трогать».
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
В POST запросе круче не будет т.к. не будет работеть кеширование.

Любопытнее другой вопрос, действительно ли обработка N запросов на получение объектов медленее, чем обработка 1 запроса на получение N объектов. При условии, что клиент посылает все запросы через одно HTTP соединение, а сервер использует persistent соединения с СУБД. Если объекты достаточно тяжелые, лишние накладные расходы могут оказаться малы. А теперь если учесть, что гранулярность кеширования увеличилась и клиент не будет запрашивать один и тот же объект дважды, может получиться так, что N запросов будут работать быстрее. А если клиент и сервер поддерживают SPDY и запросы пойдут не последовательно а параллельно, то ценой увеличения нагрузки на сервер можем получить уменьшение времени отклика. Сейчас низкое время отклика вроде бы ценится.
Ответ написан
Есть еще один интересный вопрос: зачем клиенту понадобилось запрашивать с сервера много моделей по ID? Что объединяет эти объекты? Это какая-то сущность, которая есть на клиенте, но о которой не известно серверу. Возможно стоит ввести эту сущность и проблема отпадёт.
Ответ написан
@1099511627776
Пишу все что интересно и на всем на чем интересно
Попробуйте запихнуть их в хедеры
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы