Буду планировать депрекацию своих сервисов на v4. Клод накидал хороший план про это, возможно кому-то пригодится:# Анонсирование прекращения поддержки IPv4 в REST API
## Стратегия коммуникации
### 1. Таймлайн (рекомендуемый)
Объявление → Dual-stack период → Soft deprecation → Hard deprecation → Отключение
│ │ │ │ │
-18 мес. -12 мес. -6 мес. -3 мес. День X
### 2. HTTP-заголовки deprecation
Начните добавлять заголовки **задолго до отключения**:
HTTP/1.1 200 OK
Deprecation: Sat, 01 Feb 2026 00:00:00 GMT
Sunset: Sat, 01 Aug 2026 00:00:00 GMT
Link: <https://api.example.com/docs/ipv6-migration>; rel="deprecation"
X-IPv4-Deprecation: "IPv4 access will be removed on 2026-08-01. Please migrate to IPv6."
> Заголовки Deprecation и Sunset описаны в [RFC 8594](https://www.rfc-editor.org/rfc/rfc8594).
### 3. Тело ответа — предупреждение
{
"data": { "...": "обычный ответ" },
"_warnings": [
{
"code": "IPV4_DEPRECATED",
"message": "You are accessing this API over IPv4, which will be discontinued on 2026-08-01. Please migrate to IPv6.",
"documentation_url": "https://api.example.com/docs/ipv6-migration",
"sunset_date": "2026-08-01"
}
]
}
### 4. Поэтапное отключение (Soft → Hard)
Этап 1: Только предупреждения (заголовки + body warnings)
Этап 2: Rate limiting для IPv4 (снижение лимитов)
Этап 3: HTTP 299 Warning (deprecated status)
Этап 4: Периодические "brownouts" — плановые отключения IPv4
Этап 5: 410 Gone для IPv4-запросов
**Пример brownout-расписания:**
2026-03-01: IPv4 недоступен 1 час (12:00–13:00 UTC)
2026-04-01: IPv4 недоступен 4 часа (10:00–14:00 UTC)
2026-05-01: IPv4 недоступен 8 часов
2026-06-01: IPv4 недоступен 24 часа
2026-08-01: Полное отключение
### 5. Финальный ответ после отключения
HTTP/1.1 410 Gone
Content-Type: application/json
{
"error": {
"code": "IPV4_NO_LONGER_SUPPORTED",
"message": "This API no longer supports IPv4. Please use IPv6.",
"documentation_url": "https://api.example.com/docs/ipv6-migration"
}
}
## Каналы коммуникации
| Канал | Когда | Что |
|-------|-------|-----|
| **Changelog / Blog** | -18 мес. | Подробный пост с обоснованием и планом |
| **Email рассылка** | -12, -6, -3, -1 мес. | Персонализированные письма пользователям IPv4 |
| **API Dashboard** | Постоянно | Баннер с обратным отсчётом |
| **Документация** | -18 мес. | Гайд по миграции на IPv6 |
| **Status page** | Brownouts | Уведомления о плановых отключениях |
| **SDK/Changelog** | -12 мес. | Обновлённые SDK с поддержкой IPv6 |
| **Заголовки ответа** | -12 мес. | Deprecation, Sunset |
| **Соцсети / DevRel** | Ключевые даты | Напоминания |
## Мониторинг и аналитика
# Отслеживайте долю IPv4-трафика перед каждым этапом
def track_ipv4_usage(request):
ip_version = "IPv4" if is_ipv4(request.remote_addr) else "IPv6"
metrics.increment(
"api.request.ip_version",
tags={
"version": ip_version,
"client_id": request.client_id,
"endpoint": request.path
}
)
**Ключевые метрики:**
- % запросов по IPv4 (общий и по клиентам)
- Список клиентов, **всё ещё** использующих только IPv4
- Тренд миграции после каждого уведомления
## Что предоставить клиентам
### Гайд по миграции
## Чеклист миграции на IPv6
- [ ] Убедитесь, что ваша инфраструктура поддерживает IPv6
- [ ] Обновите DNS-резолвинг (поддержка AAAA-записей)
- [ ] Обновите firewall-правила для IPv6
- [ ] Обновите SDK до версии >= X.Y.Z
- [ ] Проверьте hardcoded IPv4-адреса в конфигурации
- [ ] Протестируйте через IPv6-only endpoint: https://ipv6.api.example.com
- [ ] Убедитесь, что логирование корректно работает с IPv6-адресами
### Тестовый IPv6-only endpoint
https://ipv6.api.example.com/v1/health
Предоставьте его заранее, чтобы клиенты могли проверить совместимость.
## Важные нюансы
1. **Не недооценивайте legacy-клиентов** — у многих корпоративных клиентов IPv6 может быть не развёрнут
2. Предложите переходное решение — NAT64/DNS64 gateway или прокси
3. Учитывайте регионы — в некоторых странах IPv6-покрытие всё ещё низкое
4. SLA и контракты — проверьте, нет ли обязательств по поддержке IPv4
5. Brownouts — самый эффективный способ заставить клиентов мигрировать (подход GitHub)