Как оптимизировать скорость выполнения запроса?
Работаю с не самым удобным API. При запросе получаю 3800 объектов. Далее, для получения картинок, отправляю ещё по запросу персонально для каждого объекта. В итоге процесс получения объектов занимает меньше секунды, а картинок для них ~ 5 минут. Как ускорить этот процесс?
protected void parse() throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://api.steampay.com/api/products")).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
ObjectMapper mapper = new ObjectMapper();
Products products = mapper.readValue(response.body(), Products.class);
List<Product> productsList = products.getProducts();
for (Product product : productsList){
String query = URLEncoder.encode(product.getTitle(), StandardCharsets.UTF_8);
HttpRequest req = HttpRequest.newBuilder().uri(URI.create("https://steampay.com/api/search?query=" + query)).build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
Products justProducts = mapper.readValue(res.body(), Products.class);
List<Product> prods = justProducts.getProducts();
String imageUrl = null;
if (prods == null){
System.out.println("ERROR: PRODUCTS = NULL!");
}
else{
if (prods.size() > 0){
imageUrl = prods.get(0).getImage();
}
else{
String title = StringEscapeUtils.unescapeJava(product.getTitle());
String encodingErrorQuery = URLEncoder.encode(title, StandardCharsets.UTF_8);
HttpRequest encodingErrorRequest = HttpRequest.newBuilder().uri(URI.create("https://steampay.com/api/search?query=" + encodingErrorQuery)).build();
HttpResponse<String> encodingErrorResponse = client.send(encodingErrorRequest, HttpResponse.BodyHandlers.ofString());
Products encodingErrorProducts = mapper.readValue(encodingErrorResponse.body(), Products.class);
List<Product> encodingErrorProds = encodingErrorProducts.getProducts();
if (encodingErrorProds == null){
System.out.println("ERROR: PRODUCTS = NULL!");
}
else {
if (encodingErrorProds.size() > 0){
imageUrl = encodingErrorProds.get(0).getImage();
}
else {
System.out.println("ERROR!");
}
}
}
System.out.println(product.getTitle());
System.out.println(imageUrl);
System.out.println(product.getPrices().getRub() + "₽");
System.out.println("-------------------------------------------");
}
}
}