Об этом проекте

Feign — это библиотека с открытым исходным кодом для Java, которая упрощает создание HTTP-клиентов за счёт декларативного подхода на основе аннотаций. Вместо ручной сборки HTTP-запросов разработчики описывают интерфейс на Java с аннотациями, указывающими метод HTTP, шаблон URL, заголовки и тело, а Feign генерирует реализацию во время выполнения. Библиотека вдохновлена Retrofit, JAX-RS 2.0 и спецификациями WebSocket. Её главная цель — снизить сложность единообразной привязки кода на Java к HTTP API, независимо от того, следует ли API соглашениям REST. Ключевые возможности включают: - определение интерфейсов на основе аннотаций с использованием @RequestLine, @Param, @Headers, @QueryMap, @HeaderMap и @Body; - поддержку выражений шаблонов URI согласно уровню 1 RFC 6570, с ограниченной поддержкой выражений уровня 3 в стиле путей; - настраиваемые кодировщики и декодировщики для JSON (Gson, Jackson, Moshi, Fastjson2), XML (JAXB, SAX) и SOAP; - подключаемые внутренние реализации HTTP-клиентов, включая OkHttp, Java 11 HTTP/2 Client и Ribbon для обнаружения сервисов; - интеграцию с механизмом circuit breaker через Hystrix; - интеграцию логирования с SLF4J; - настраиваемые параметры запросов, такие как тайм-ауты подключения и чтения, а также следование перенаправлениям; - поддержку нескольких целевых интерфейсов с динамическим разрешением URL и оформлением запросов; - пользовательское расширение параметров через интерфейс Expander. Feign версии 10.x и выше построен на Java 8 и совместим с Java 9, 10 и 11. Для совместимости с JDK 6 доступна версия Feign 9.x. Дорожная карта включает запланированные функции: кэширование ответов, полную поддержку выражений шаблонов URI (уровни 1–4), рефакторинг API Logger и Retry, асинхронное выполнение через CompletableFuture, реактивное выполнение через Reactive Streams, а также дополнительную поддержку circuit breaker, например Resilience4J. Feign доступен в Maven Central под groupId io.github.openfeign. Проект включает примеры клиентов для API GitHub и Wikipedia и интегрируется с проектом Netflix Denominator.