Этот вопрос в некоторой степени основан на мнении (и, следовательно, несколько не по теме для StackOverflow), но я думаю, что некоторые советы или общие рекомендации могут быть полезными и полезными для других. Поэтому следующий ответ - мое мнение.
Вы, как разработчик серверного приложения, несете ответственность за безопасность и защиту сервера, а также за использование ресурсов сервера. Вы, как разработчик, должны доверять клиентам в минимальной степени.
Тем не менее, отправка всех документов, когда клиент не может указать предел (случайно или преднамеренно), является худшим способом справиться с ситуацией. Это как кричать: «Эй, клиенты и хакеры, вот конечная точка, и если вы хотите DoS-атака мой сервер, просто позвоните этой конечной точке пару раз».
Чтобы защитить ваш сервер, у вас должен быть предел безопасности даже для параметра «limit», потому что разрешение любого значения для него может быть столь же плохим: только потому, что вы заставляете клиентов указывать ограничение, не защищает ваш сервер, для «плохих» клиентов также может быть установлен предел 1e9
, который, скорее всего, будет включать все ваши документы.
Мой совет: всегда иметь значимые значения по умолчанию и пределы безопасности . Значения по умолчанию всегда должны быть задокументированы, пределы безопасности не так важны (но также могут быть задокументированы).
Итак, как вы должны справиться с этим:
Если предел отсутствует, примените значения по умолчанию. Если у вас не может быть значений по умолчанию, просто пропустите этот шаг (хотя должна быть веская причина не иметь / не разрешать значение по умолчанию).
Предел должен быть сверен с пределом безопасности. Если оно превышает значение безопасности, используйте предел безопасности (максимально допустимый предел).
Если у сервера есть «право» изменить запрошенный лимит (например, использование значения по умолчанию при отсутствии лимита или ограничение лимита на основе предела безопасности), сервер должен сообщить клиенту лимит фактически использовался для обслуживания запроса.
А что касается эффективной подкачки страниц в MongoDB: я рекомендую использовать Query.Skip()
и Query.Limit()
только для "небольшого" количества документов. Для эффективной подкачки, которая «масштабируется» с количеством документов, проверьте этот вопрос + ответ: Эффективная подкачка в MongoDB с использованием mgo