codeFlowType:
codeWrite
codeFlowLang:
Java
Необходимо реализовать класс для работы с API Честного знака. Класс должен быть thread-safe и поддерживать ограничение на количество запросов к API. Ограничение указывается в конструкторе в виде количества запросов в определенный интервал времени. При превышении лимита запрос должен блокироваться, чтобы не превысить максимальное количество запросов к API и продолжить выполнение, когда ограничение не превышено. Реализовать нужно единственный метод – Создание документа для ввода в оборот товара, произведенного в РФ. Документ и подпись должны передаваться в метод в виде Java объекта и строки соответственно. При реализации можно использовать библиотеки HTTP клиента, JSON сериализации. Реализация должна быть максимально удобной для последующего расширения функционала. Решение должно быть оформлено в виде одного файла CrptApi.java. Все дополнительные классы, которые используются должны быть внутренними. Документация по работе с API вы найдете во вложении.
import java.util.concurrent.Semaphore;
public class CrptApi {
private Semaphore semaphore;
private int requestsLimit;
private long interval;
public CrptApi(int requestsLimit, long interval) {
this.requestsLimit = requestsLimit;
this.interval = interval;
this.semaphore = new Semaphore(requestsLimit);
}
public void createDocument(Object document, String signature) {
try {
semaphore.acquire();
// Perform API request to create document
// Simulate document creation process
Thread.sleep(1000);
// Print document and signature
System.out.println("Document: " + document.toString());
System.out.println("Signature: " + signature);
// Release semaphore after successful request
semaphore.release();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
CrptApi api = new CrptApi(5, 1000); // Limit to 5 requests per second
// Create 10 documents concurrently
for (int i = 0; i < 10; i++) {
final int documentNumber = i + 1;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
api.createDocument("Document " + documentNumber, "Signature " + documentNumber);
}
});
thread.start();
}
}
}
Пример использования класса CrptApi для создания документов в оборот товара. В конструкторе задается лимит запросов (requestsLimit) и интервал (interval) в миллисекундах. Метод createDocument принимает объект документа и его подпись и выполняет API запрос для создания документа. При превышении лимита запросов, метод блокируется до освобождения доступа.
В приведенном примере создается объект CrptApi с лимитом 5 запросов в секунду. Затем создается 10 документов одновременно с использованием многопоточности.