[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rest-api-kak-realizovat-paginatsiyu-filtratsiyu-i-sortirovku-v-rest-api":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1123,"kak-realizovat-paginatsiyu-filtratsiyu-i-sortirovku-v-rest-api",34,"rest-api","REST API","🌐","Как реализовать пагинацию, фильтрацию и сортировку в REST API?","Пагинация, фильтрация и сортировка — обязательные механизмы для работы с большими коллекциями ресурсов, реализуемые через query-параметры HTTP-запросов.\n\n### Пагинация\n\n| Подход | Пример | Когда использовать |\n|--------|--------|--------------------|\n| Offset-based | `GET \u002Fapi\u002Fusers?page=0&size=20` | Наиболее распространённый, подходит для большинства случаев |\n| Cursor-based | `GET \u002Fapi\u002Fusers?cursor=eyJpZCI6NDJ9&size=20` | Для больших объёмов данных, real-time лент |\n\nПример ответа с метаданными пагинации:\n```json\n{\n  \"content\": [...],\n  \"page\": 0,\n  \"size\": 20,\n  \"totalElements\": 150,\n  \"totalPages\": 8,\n  \"last\": false,\n  \"_links\": {\n    \"self\": {\"href\": \"\u002Fapi\u002Fusers?page=0&size=20\"},\n    \"next\": {\"href\": \"\u002Fapi\u002Fusers?page=1&size=20\"},\n    \"last\": {\"href\": \"\u002Fapi\u002Fusers?page=7&size=20\"}\n  }\n}\n```\n\n### Фильтрация\n\n```\nGET \u002Fapi\u002Fusers?status=active\nGET \u002Fapi\u002Fusers?status=active&role=admin\nGET \u002Fapi\u002Fusers?age_gte=18&age_lte=65\nGET \u002Fapi\u002Fusers?search=Иван\n```\n\n### Сортировка\n\n```\nGET \u002Fapi\u002Fusers?sort=name,asc\nGET \u002Fapi\u002Fusers?sort=createdAt,desc&sort=name,asc\n```\n\n\u003Cdetails>\u003Csummary>Реализация в Spring (Spring Data)\u003C\u002Fsummary>\n\n```java\n@RestController\n@RequestMapping(\"\u002Fapi\u002Fusers\")\npublic class UserController {\n\n    private final UserRepository userRepository;\n\n    \u002F\u002F Пагинация и сортировка через Pageable\n    @GetMapping\n    public Page\u003CUser> getUsers(\n            @RequestParam(required = false) String status,\n            @RequestParam(required = false) String name,\n            @PageableDefault(size = 20, sort = \"id\") Pageable pageable) {\n\n        if (status != null) {\n            return userRepository.findByStatus(status, pageable);\n        }\n        if (name != null) {\n            return userRepository.findByNameContainingIgnoreCase(name, pageable);\n        }\n        return userRepository.findAll(pageable);\n    }\n}\n```\n\nЗапрос:\n```\nGET \u002Fapi\u002Fusers?status=active&page=0&size=10&sort=name,asc\n```\n\nДля сложной фильтрации можно использовать Spring Data Specifications:\n```java\n@GetMapping\npublic Page\u003CUser> getUsers(\n        @RequestParam Map\u003CString, String> filters,\n        Pageable pageable) {\n\n    Specification\u003CUser> spec = Specification.where(null);\n\n    if (filters.containsKey(\"status\")) {\n        spec = spec.and((root, query, cb) ->\n            cb.equal(root.get(\"status\"), filters.get(\"status\")));\n    }\n    if (filters.containsKey(\"name\")) {\n        spec = spec.and((root, query, cb) ->\n            cb.like(cb.lower(root.get(\"name\")),\n                    \"%\" + filters.get(\"name\").toLowerCase() + \"%\"));\n    }\n\n    return userRepository.findAll(spec, pageable);\n}\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** нужно знать оба подхода к пагинации (offset и cursor) и понимать, когда использовать какой. Частая ошибка — забыть про метаданные пагинации (totalElements, totalPages) в ответе или не упомянуть cursor-based подход.","","middle",[15],"rest",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Как реализовать пагинацию, фильтрацию и сортировку в REST AP — Gymterview","Пагинация, фильтрация и сортировка — обязательные механизмы для работы с большими коллекциями ресурсов, реализуемые через query-параметры HTTP-запросов.","Пагинация, фильтрация и сортировка — обязательные механизмы для работы с большими коллекциями ресурсов, реализуемые чере",[15,13],true]