Java
Start with the REST guide to get a Platform API token. This example uses Java's HttpClient and Jackson to parse JSON.
Create a Gradle project. Add this build.gradle:
plugins {
id 'java'
id 'application'
}
repositories { mavenCentral() }
dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind:2.19.0'
}
application { mainClass = 'dev.reconstruct.example.Main' }
Save as src/main/java/dev/reconstruct/example/Main.java:
package dev.reconstruct.example;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
public final class Main {
private static final String BASE = "https://reconstruct.dev/api/v1/platform";
private static JsonNode get(HttpClient client, ObjectMapper mapper,
String token, String path) throws Exception {
var request = HttpRequest.newBuilder(URI.create(BASE + path))
.header("Authorization", "Bearer " + token)
.timeout(Duration.ofSeconds(10))
.GET().build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new IllegalStateException("API returned HTTP " + response.statusCode());
}
return mapper.readTree(response.body());
}
public static void main(String[] args) throws Exception {
String token = System.getenv("CR_RECONSTRUCT_API_TOKEN");
if (token == null || token.isBlank()) {
throw new IllegalStateException("Set CR_RECONSTRUCT_API_TOKEN");
}
var client = HttpClient.newHttpClient();
var mapper = new ObjectMapper();
var page = get(client, mapper, token, "/catalogs?pageSize=10");
for (var catalog : page.path("catalogs")) {
String id = catalog.path("catalogId").asText();
String encoded = URLEncoder.encode(id, StandardCharsets.UTF_8)
.replace("+", "%20");
var detail = get(client, mapper, token, "/catalogs/" + encoded);
System.out.println(detail.path("catalogId").asText() + ": "
+ detail.path("description").asText());
}
if (page.hasNonNull("nextPageToken")) {
System.out.println("Next page token: " + page.get("nextPageToken").asText());
}
}
}
Run gradle run (or ./gradlew run with a wrapper). Send nextPageToken as the URL-encoded pageToken query parameter to fetch another page.