[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jira-chto-takoe-jira-rest-api-i-kak-s-nim-rabotat":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":19,"progress":20,"seo":21},916,"chto-takoe-jira-rest-api-i-kak-s-nim-rabotat",27,"jira","Jira","📋","Что такое Jira REST API и как с ним работать?","Jira REST API — основной программный интерфейс для взаимодействия с Jira извне, позволяющий выполнять CRUD-операции над задачами, проектами, пользователями, workflow и другими сущностями.\n\n### REST API v2 vs v3\n\n- v2 — стабильный API, доступен и в DC, и в Cloud. Базовый URL: `\u002Frest\u002Fapi\u002F2\u002F`\n- v3 — Cloud-only, поддерживает ADF (Atlassian Document Format) для rich-text, улучшенная пагинация. Базовый URL: `\u002Frest\u002Fapi\u002F3\u002F`\n\n### Аутентификация\n\n| Метод | DC | Cloud | Описание |\n|---|---|---|---|\n| Basic Auth | Да | Нет (deprecated) | username:password в Base64 |\n| PAT (Personal Access Token) | Да | Нет | Токен, привязанный к пользователю DC |\n| API Token | Нет | Да | Токен Atlassian аккаунта + email |\n| OAuth 2.0 (3LO) | Нет | Да | Полный OAuth-flow с авторизацией пользователя |\n| OAuth 2.0 (2LO) | Нет | Да | App-level доступ без пользователя |\n\n### Основные эндпоинты\n\n```\nGET    \u002Frest\u002Fapi\u002F2\u002Fissue\u002F{issueKey}          — получить задачу\nPOST   \u002Frest\u002Fapi\u002F2\u002Fissue                      — создать задачу\nPUT    \u002Frest\u002Fapi\u002F2\u002Fissue\u002F{issueKey}           — обновить задачу\nDELETE \u002Frest\u002Fapi\u002F2\u002Fissue\u002F{issueKey}           — удалить задачу\nPOST   \u002Frest\u002Fapi\u002F2\u002Fissue\u002F{issueKey}\u002Ftransitions — сменить статус\nPOST   \u002Frest\u002Fapi\u002F2\u002Fsearch                     — поиск через JQL\nGET    \u002Frest\u002Fapi\u002F2\u002Fproject                    — список проектов\nGET    \u002Frest\u002Fapi\u002F2\u002Fuser?accountId=...         — информация о пользователе\n```\n\n### Пример: создание задачи (Java, Spring RestClient)\n\n\u003Cdetails>\n\u003Csummary>Код JiraIssueService\u003C\u002Fsummary>\n\n```java\n@Service\npublic class JiraIssueService {\n\n    private final RestClient restClient;\n\n    public JiraIssueService(@Value(\"${jira.base-url}\") String baseUrl,\n                            @Value(\"${jira.pat}\") String pat) {\n        this.restClient = RestClient.builder()\n                .baseUrl(baseUrl + \"\u002Frest\u002Fapi\u002F2\")\n                .defaultHeader(\"Authorization\", \"Bearer \" + pat)\n                .defaultHeader(\"Content-Type\", \"application\u002Fjson\")\n                .build();\n    }\n\n    public String createIssue(String projectKey, String summary, String description) {\n        String body = \"\"\"\n                {\n                    \"fields\": {\n                        \"project\": {\"key\": \"%s\"},\n                        \"summary\": \"%s\",\n                        \"description\": \"%s\",\n                        \"issuetype\": {\"name\": \"Task\"}\n                    }\n                }\n                \"\"\".formatted(projectKey, summary, description);\n\n        Map\u003CString, Object> response = restClient.post()\n                .uri(\"\u002Fissue\")\n                .body(body)\n                .retrieve()\n                .body(new ParameterizedTypeReference\u003C>() {});\n\n        return (String) response.get(\"key\");\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Пример: поиск через JQL\n\n```java\npublic List\u003CMap\u003CString, Object>> searchIssues(String jql, int maxResults) {\n    String body = \"\"\"\n            {\n                \"jql\": \"%s\",\n                \"maxResults\": %d,\n                \"fields\": [\"summary\", \"status\", \"assignee\"]\n            }\n            \"\"\".formatted(jql, maxResults);\n\n    Map\u003CString, Object> response = restClient.post()\n            .uri(\"\u002Fsearch\")\n            .body(body)\n            .retrieve()\n            .body(new ParameterizedTypeReference\u003C>() {});\n\n    return (List\u003CMap\u003CString, Object>>) response.get(\"issues\");\n}\n```\n\n### Пример: смена статуса (transition)\n\n```java\npublic void transitionIssue(String issueKey, String transitionId) {\n    String body = \"\"\"\n            {\n                \"transition\": {\"id\": \"%s\"}\n            }\n            \"\"\".formatted(transitionId);\n\n    restClient.post()\n            .uri(\"\u002Fissue\u002F{issueKey}\u002Ftransitions\", issueKey)\n            .body(body)\n            .retrieve()\n            .toBodilessEntity();\n}\n```\n\n### Пагинация и Rate Limiting\n\n- Параметры `startAt` и `maxResults`, ответ содержит `total`, `startAt`, `maxResults`\n- Cloud API ограничивает `maxResults` до 100 для большинства эндпоинтов\n- HTTP 429 (Too Many Requests) с заголовком `Retry-After`, рекомендуется экспоненциальный backoff\n\n### Частые ошибки\n\n- Использование Basic Auth с паролем в Cloud — поддерживается только API Token + email\n- Игнорирование rate limiting — приложение получает 429 и ломается\n- Жёсткое указание `maxResults=1000` — в Cloud реальный лимит 100, лишнее игнорируется\n- Не обработка ошибок 404 при обращении к удалённым или перемещённым задачам\n\n### Как используется в 2026\n\n- REST API v3 — стандарт для Cloud-разработки\n- Spring 6+ RestClient и WebClient — основные HTTP-клиенты для Java-интеграций\n- Atlassian активно развивает GraphQL API (пока в beta), но REST остаётся основным\n- Personal Access Tokens (PAT) стали стандартом аутентификации для DC-интеграций\n\n> **На собеседовании:** покажите знание отличий между v2 (DC + Cloud) и v3 (Cloud-only). Обязательно упомяните пагинацию и rate limiting — это реальная повседневная проблема. Частая ошибка кандидатов — не упомянуть различия в аутентификации между DC (PAT) и Cloud (OAuth 2.0).","","junior",[15,16,17,18,7],"rest-api","jira-authentication","http","spring-boot",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":36,"featuredSnippetReady":37},"Что такое Jira REST API и как с ним работать — Gymterview","Jira REST API v2\u002Fv3: аутентификация (PAT, OAuth 2.0, API Token), CRUD задач, пагинация, rate limiting. Примеры на Java Spring RestClient.","Jira REST API: аутентификация, эндпоинты, примеры на Java — Gymterview","Полный обзор Jira REST API: v2 vs v3, методы аутентификации, основные эндпоинты, пагинация и rate limiting с примерами.",[27,28,29,30,31,32,33,34,35],"Jira REST API","REST API v2","REST API v3","PAT","OAuth 2.0","API Token","Spring RestClient","Java","пагинация","Jira REST API — основной программный интерфейс для взаимодействия с Jira. API v2 доступен в DC и Cloud, v3 — Cloud-only (поддерживает ADF). Аутентификация: PAT для DC, API Token и OAuth 2.0 для Cloud. Поддерживает CRUD задач, поиск через JQL, transitions. Пагинация через startAt\u002FmaxResults (Cloud лимит 100), rate limiting — HTTP 429 с Retry-After.",true]