Chuyển tới nội dung chính

Java

Bắt đầu với hướng dẫn REST để lấy token API. Ví dụ dùng HttpClient Java và Jackson phân tích JSON.

Tạo dự án Gradle. Thêm build.gradle này:

plugins {
id 'java'
id 'application'
}

repositories { mavenCentral() }
dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind:2.19.0'
}
application { mainClass = 'dev.reconstruct.example.Main' }

Lưu thành 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());
}
}
}

Chạy gradle run hoặc ./gradlew run nếu có wrapper. Gửi nextPageToken dưới dạng pageToken mã hóa URL để lấy trang khác.