*Client, ctx überall als erstes Argument und Ressourcengruppen, und es behebt jeden bekannten Fehler von v2. Es deckt alle 67 Operationen der aktuellen API ab.
Auf einen Blick
Konstruktion und Optionen
Optionen pro Anfrage:
Methode für Methode
api ist das rest.Rest von v2, c der *squarecloud.Client von v3.
Typen
Fehler
rest.APIError (StatusCode, Code, Message) wird zu squarecloud.APIError (Status, Code, Message, Method, Path): Benenne StatusCode in Status um. rest.ErrorCode(err) und rest.IsRateLimit(err) wurden entfernt: Verwende errors.As und prüfe Code oder Status == 429.
- Netzwerkfehler sind jetzt
*APIErrormitStatus0,CodeNETWORK_ERRORoderTIMEOUTund dem Text der Ursache alsMessage, und sie lassen sich zur Ursache entpacken (errors.Is(err, context.Canceled)funktioniert). - Ebenso lokale Prüfungen (
Status0:INVALID_ID,FILE_TOO_LARGE,INVALID_API_KEY) und ein 2xx-Body, der kein JSON ist (UNKNOWN_ERROR,Invalid JSON in HTTP <status> response). - Ein 2xx-Body mit
"status": "error"ist jetzt ein Fehler (v2 meldete ihn als Erfolg). Die Ablehnungen des Clusters beim Starten/Stoppen von Apps und Datenbanken kommen als 409CONTAINER_ALREADY_STARTED,CONTAINER_ALREADY_STOPPED,CONTAINER_TEMPORARILY_SUSPENDED,CONTAINER_NOT_FOUND,CONTAINER_INSUFFICIENT_DISK_SPACE,CONTAINER_NETWORK_CONFLICToderACTION_FAILED, ohne Nachricht. Das SDK gibt eine „bereits“-Antwort als Fehler zurück: Behandle sie selbst als Erfolg, wenn du das brauchst. - Eine Antwort ohne Code hat den
CodeUNKNOWN_ERROR. - Ein abgelaufener API-Schlüssel ergibt 401
ACCESS_DENIED, wie ein unbekannter. - Es gibt eine
Code*-Konstante für jeden Code, den die API dokumentiert. Die API sendet jetzt 429RATE_LIMITED(CodeRateLimited), wo sieRATE_LIMITundRATE_LIMIT_EXCEEDEDsendete;CodeRateLimitundCodeRateLimitExceededbleiben erhalten, als veraltet markiert. - Jeder Fehler von
AI.Chathat die Form von OpenAI mit einem kleingeschriebenen Code (access_denied,rate_limit_exceeded,server_overloaded, …), denCodeunverändert enthält. Error()erzeugtsquarecloud: <METHOD> <path>: HTTP <status> <CODE>: <message>(v2:squarecloud: <message> (<CODE>, HTTP <status>)). Prüfe die Felder, nicht den Text.
Verhaltensänderungen
- Leerer API-Schlüssel:
New("")(oder ein nur aus Leerzeichen bestehender Schlüssel) gibt weiterhin einen Client zurück (es kann keinen Fehler zurückgeben), aber jeder Aufruf außerService.Statusschlägt lokal mitINVALID_API_KEYfehl. - Snapshot 202: v2 gab einen
*APIErrormitStatusCode202 zurück. v3 gibt einSnapshotCreatedmitPending: trueund einennil-Fehler zurück. - Realtime:
Nextgibt jetzt einRealtimeEventzurück. Verzweige nachev.Event(system,status,logs,error,message). Für Logs gibev.Lineaus (das Byte\u0001/\u0002wird entfernt;ev.Datableibt der rohe Frame) und verwendeev.Streamfür stdout/stderr. Für den Status verwendeev.Status: bei einem Status-Ereignis nienil, flach über Frames und Neuverbindungen hinweg zusammengeführt. NachREALTIME_DISCONNECTEDgibtNextio.EOFzurück. Der Stream bricht nicht mehr nach 30 s ab, Neuverbindungen warten mindestens 5,5 s nach dem vorherigen Öffnen, und das Öffnen ist durch das Client-Timeout begrenzt, bis die Header eintreffen. Siehe Realtime. - Timeouts: v2 verwendete für alles ein festes Timeout von 30 s im
http.Client. v3 wendet eine Standard-Deadline nur an, wennctxkeine hat: das Client-Timeout (WithTimeout, 30 s) für die meisten Aufrufe; mindestens 2 Minuten für Start/Stop/Restart, das Erstellen von Datenbanken, das Erstellen/Wiederherstellen von Snapshots undAI.Chat; keine für Uploads, Dateischreibvorgänge mit über 1 MiB Inhalt und Snapshot-Downloads.WithTimeout(0)deaktiviert sie alle. - Leere Netzwerkfenster:
Analytics,ErrorsundPerformancegebennil-Zeiger zurück, wenn das Fenster keinen Verkehr hat. - Header: Jede API-Anfrage sendet
Accept: application/json(text/event-streamfür Realtime). Der Standard-User-Agenthat sich vonSquare GOzusquarecloud-sdk-go/3.0.0geändert (WithUserAgentüberschreibt ihn weiterhin). - IDs: Jede ID wird jetzt als ein Pfadsegment prozentkodiert (v2 fügte sie unverändert in den Pfad ein), und eine leere ID,
.oder..schlägt lokal mitINVALID_IDfehl. - Dateischreibvorgänge: v2 sendete den Inhalt immer als String, was Binärdateien beschädigte, und konnte keine leere Datei schreiben. v3 sendet den Inhalt immer Base64-kodiert, sodass jedes Byte erhalten bleibt, leerer Inhalt eine leere Datei schreibt und Inhalt über 10 MB lokal mit
FILE_TOO_LARGEfehlschlägt. Die API antwortet mit 400INVALID_CONTENTauf Inhalt, den sie nicht dekodieren kann. - Dateilesevorgänge: v3 fordert immer Base64 an und dekodiert es, statt des JSON-Byte-Arrays, das v2 las (und das die API als veraltet markiert hat). Eine Datei über 10 MB ergibt 413
FILE_TOO_LARGE. - Dateiauflistung: Das Auflisten eines Verzeichnisses, das nicht existiert, ergibt 404
FILE_NOT_FOUND; früher war es eine leere Liste. - Snapshots: Listeneinträge enthalten
VersionIDundURLvon der API; ausKeywird nichts herausgeparst. - Wiederholungen: neu. Netzwerkfehler bei GET, 503
UPLOAD_BUSY/ANALYTICS_BUSYund 503DATABASE_UNAVAILABLEbei GET werden standardmäßig zweimal wiederholt;WithMaxRetries(0)stellt das Verhalten von v2 wieder her.DATABASE_UNAVAILABLEkann eintreffen, nachdem eine Mutation begonnen hat, daher wiederholt das SDK ihn bei anderen Methoden nie; wiederhole eine idempotente Mutation selbst, wenn du möchtest. Siehe Wiederholungen. - Go-Version: Das Minimum ist von Go 1.24 auf Go 1.22 gesunken.

