SDK ל-Java¶
גישה תכנותית ל-HomeCloud מ-Java 17+.
Maven: com.homecloudlab:homecloud-sdk
Package: com.homecloudlab.sdk
ADR: ADR-052
אותן יכולות HomeCloud כמו Python, Node.js ו-Go. ה-API הציבורי אידיומטי ל-Java (HomeCloud.builder(), records, חריגות unchecked) ורשאי להיראות אחרת. ההתנהגות שקולה אלא אם תיעדנו תיקון בטיחות (למשל Java לא מריטריא mq().send אוטומטית).
HomeCloud הוא thread-safe אחרי הבנייה. עשו reuse (למשל Spring @Bean). Login אינטראקטיבי ב-HomeCloudAuth ומחזיר client חדש.
התקנה¶
<dependency>
<groupId>com.homecloudlab</groupId>
<artifactId>homecloud-sdk</artifactId>
<version>0.5.10</version>
</dependency>
עד Maven Central (שער GA ציבורי) מורידים מ-GitHub Packages — ראו את README של Java ל-repository + PAT. Maven Central לא דורש PAT.
יצירת לקוח¶
HomeCloud client = HomeCloud.fromEnv();
client.so().upload("docs", UploadOptions.builder().filePath("./a.txt").key("a.txt").build());
מפתחות מפורשים:
פרופיל ~/.homecloud/credentials:
קונפיגורציה מתקדמת:
HomeCloud client = HomeCloud.builder()
.apex("holab.abrdns.com")
.accessKey("HCAK...", "secret")
.requestTimeout(Duration.ofSeconds(30))
.build();
מתוך Function (STS)¶
HomeCloud client = HomeCloud.fromSts(new Sts(
entry.accessKeyId(),
entry.secretAccessKey(),
entry.sessionToken(),
entry.baseUrl(),
null,
"so"
));
Object Storage¶
client.so().putJson("docs", "a.json", Map.of("ok", true));
ObjectHead meta = client.so().headObject("docs", "a.json");
תורים¶
client.mq().send("orders", Map.of("id", 1));
List<Message> msgs = client.mq().receive("orders", new ReceiveOptions(10, 5, false));
send לא מרוטרי על 502/503/504 (בניגוד ל-Python/Node) כדי לא לשכפל הודעות.
משימות ודיאגרמות¶
מישור ניהול — JWT משתמש (HomeCloudAuth.login) או Access Key קשור למשתמש (SigV1).
List<Map<String, Object>> items = client.tasks().search("cert @alice &ops due:overdue");
Map<String, Object> detail = client.tasks().get("TASK-12");
client.tasks().create("Rotate cert", Map.of(
"type", "change",
"priority", "p2",
"assignees", List.of("alice"),
"label_names", List.of("ops")));
client.tasks().assignMe("TASK-12", "in_progress");
client.tasks().comment("TASK-12", "Deployed to staging");
List<Map<String, Object>> diagrams = client.diagrams().list();
Map<String, Object> doc = client.diagrams().get(diagramId);
client.diagrams().create("Production plan", "Draft", null);
client.diagrams().update(diagramId, Map.of(
"name", "Prod",
"document", doc.get("document"),
"revision", doc.get("revision")));
שגיאות¶
try {
client.so().headObject("docs", "missing.txt");
} catch (NotFoundException e) {
System.out.println(e.getResourceType() + " " + e.getResource());
}
משתני סביבה¶
כמו ב-Python: HC_ACCESS_KEY_ID, HC_SECRET_ACCESS_KEY, HC_APEX, HC_PROFILE (וגם HOMECLOUD_*).