Skip to content

fifimova/Crpt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

CrptApi Java Client

Описание

CrptApi - техническое задание, цель которого - создание Java клиента для взаимодействия с API Честного знака. Основная особенность этого клиента заключается в поддержке ограничения количества запросов в единицу времени, обеспечивая тем самым эффективное взаимодействие с API без превышения допустимых лимитов.

Основные характеристики

  • Ограничение запросов: Класс CrptApi реализует ограничение количества запросов к API в рамках заданного временного интервала.
  • Thread-Safe: Реализация учитывает многопоточное использование, обеспечивая корректную работу в многопоточной среде.
  • Гибкая настройка: Пользователь может задать временной интервал и лимит запросов при создании экземпляра класса.

Как это работает

Клиент использует Semaphore для контроля количества одновременных запросов. При достижении лимита запросов дополнительные запросы блокируются до тех пор, пока не будет доступно новое разрешение для их выполнения.

public class CrptApi {
    private final Semaphore requestSemaphore;
    private final ScheduledExecutorService scheduler;

    public CrptApi(TimeUnit timeUnit, long duration, int requestLimit) {
        this.semaphore = new Semaphore(requestLimit);
        this.scheduler = Executors.newScheduledThreadPool(1);

        scheduler.scheduleAtFixedRate(() -> 
            semaphore.release(requestLimit - semaphore.availablePermits()),
            0, duration, timeUnit);
    }

Как использовать

Для использования CrptApi необходимо создать экземпляр класса с указанием временного интервала и лимита запросов. Например:

CrptApi api = new CrptApi(TimeUnit.MINUTES, 1, 5); // Ограничение 5 запросов в минуту

Отправка документа

Для отправки документа используйте метод sendDocument, передавая JSON-документ и подпись:

String jsonDocument = "..."; // Ваш JSON-документ
String signature = "..."; // Ваша подпись
api.sendDocument(jsonDocument, signature);

Классы данных

  • Document: Основной класс для представления документа.
  • Description: Класс описания документа.
  • Product: Класс продукта в документе.

Зависимости

  • Jakarta Bean Validation API
  • Jackson для сериализации/десериализации JSON
  • Lombok для сокращения бойлерплейт-кода

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages