*Client、すべての箇所で第 1 引数となる ctx、そしてリソースグループを採用し、v2 の既知のバグをすべて修正しています。現在の API の 67 個の操作をすべてカバーしています。
概要
初期化とオプション
リクエストごとのオプション:
メソッドごとの対応
api は v2 の rest.Rest、c は v3 の *squarecloud.Client です。
型
エラー
rest.APIError (StatusCode, Code, Message) は squarecloud.APIError (Status, Code, Message, Method, Path) になります。StatusCode を Status に名前変更してください。rest.ErrorCode(err) と rest.IsRateLimit(err) は削除されました。errors.As を使い、Code または Status == 429 を確認してください。
- ネットワークの失敗は、
Statusが0、CodeがNETWORK_ERRORまたはTIMEOUT、Messageが原因のテキストである*APIErrorになり、原因にアンラップされます (errors.Is(err, context.Canceled)が機能します)。 - ローカルのチェック (
Status0:INVALID_ID、FILE_TOO_LARGE、INVALID_API_KEY) と、JSON ではない 2xx のボディ (UNKNOWN_ERROR、Invalid JSON in HTTP <status> response) も同様です。 "status": "error"を含む 2xx のボディはエラーになりました (v2 は成功として報告していました)。アプリとデータベースの start/stop に対するクラスターの拒否は、メッセージなしの 409CONTAINER_ALREADY_STARTED、CONTAINER_ALREADY_STOPPED、CONTAINER_TEMPORARILY_SUSPENDED、CONTAINER_NOT_FOUND、CONTAINER_INSUFFICIENT_DISK_SPACE、CONTAINER_NETWORK_CONFLICTまたはACTION_FAILEDとして届きます。SDK は「すでに〜済み」の応答をエラーとして返すので、必要であれば自分で成功として扱ってください。- コードのないレスポンスは、
CodeがUNKNOWN_ERRORになります。 - 期限切れの API キーは、不明なキーと同様に 401
ACCESS_DENIEDです。 - API がドキュメント化しているすべてのコードに
Code*定数があります。API は、以前RATE_LIMITとRATE_LIMIT_EXCEEDEDを送っていた箇所で 429RATE_LIMITED(CodeRateLimited) を送るようになりました。CodeRateLimitとCodeRateLimitExceededは非推奨として残っています。 AI.Chatのエラーはすべて OpenAI の形式で、小文字のコード (access_denied、rate_limit_exceeded、server_overloadedなど) を持ち、Codeにはそれがそのまま入ります。Error()はsquarecloud: <METHOD> <path>: HTTP <status> <CODE>: <message>を出力します (v2:squarecloud: <message> (<CODE>, HTTP <status>))。テキストではなく、フィールドで判定してください。
動作の変更
- 空の API キー:
New("")(または空白だけのキー) は引き続きクライアントを返します (エラーを返せないため) が、Service.Status以外のすべての呼び出しがローカルでINVALID_API_KEYとして失敗します。 - Snapshot の 202: v2 は
StatusCode202 の*APIErrorを返していました。v3 はPending: trueのSnapshotCreatedとnilのエラーを返します。 - リアルタイム:
NextはRealtimeEventを返すようになりました。ev.Event(system、status、logs、error、message) で分岐してください。ログにはev.Lineを出力し (\u0001/\u0002のバイトは取り除かれます。ev.Dataは生のフレームのままです)、stdout/stderr の判別にはev.Streamを使います。ステータスにはev.Statusを使います。status イベントでは決してnilにならず、フレームと再接続をまたいでシャローマージされます。REALTIME_DISCONNECTEDの後、Nextはio.EOFを返します。ストリームが 30 秒後に切断されることはなくなり、再接続は前回の接続から最低 5.5 秒待ち、接続を開く処理はヘッダーが届くまでクライアントのタイムアウトで制限されます。リアルタイムを参照してください。 - タイムアウト: v2 はすべてに固定の 30 秒の
http.Clientタイムアウトを使っていました。v3 はctxに期限がない場合にのみデフォルトの期限を適用します。ほとんどの呼び出しにはクライアントのタイムアウト (WithTimeout、30 秒)、start/stop/restart、データベースの作成、snapshot の作成/復元、AI.Chatには最低 2 分、アップロード、1 MiB を超える内容のファイル書き込み、snapshot のダウンロードには期限なしです。WithTimeout(0)でそれらすべてが無効になります。 - 空のネットワーク期間:
Analytics、Errors、Performanceは、期間にトラフィックがない場合nilポインタを返します。 - ヘッダー: すべての API リクエストは
Accept: application/json(リアルタイムではtext/event-stream) を送信します。デフォルトのUser-AgentはSquare GOからsquarecloud-sdk-go/3.0.0に変わりました (WithUserAgentで引き続き上書きできます)。 - ID: すべての ID は 1 つのパスセグメントとしてパーセントエンコードされるようになり (v2 はそのままパスに埋め込んでいました)、空、
.、..の ID はローカルでINVALID_IDとして失敗します。 - ファイルの書き込み: v2 は常に内容を文字列として送信していたため、バイナリファイルが破損し、空のファイルを書き込めませんでした。v3 は常に内容を base64 エンコードで送信するため、すべてのバイトがそのまま往復し、空の内容では空のファイルが書き込まれ、10 MB を超える内容はローカルで
FILE_TOO_LARGEとして失敗します。デコードできない内容に対して、API は 400INVALID_CONTENTを返します。 - ファイルの読み取り: v3 は、v2 が読み取っていた JSON のバイト配列 (API では非推奨) ではなく、常に base64 を要求してデコードします。10 MB を超えるファイルは 413
FILE_TOO_LARGEです。 - ファイルの一覧: 存在しないディレクトリの一覧は 404
FILE_NOT_FOUNDになります。以前は空のリストでした。 - Snapshot: 一覧のエントリは API から送られる
VersionIDとURLを持ちます。Keyから何かを解析することはありません。 - リトライ: 新機能です。GET のネットワークエラー、503
UPLOAD_BUSY/ANALYTICS_BUSY、そして GET での 503DATABASE_UNAVAILABLEは、デフォルトで 2 回リトライされます。WithMaxRetries(0)で v2 の動作に戻ります。DATABASE_UNAVAILABLEは変更が開始された後に返されることがあるため、SDK はほかのメソッドでは決してリトライしません。必要であれば、冪等な変更は自分でリトライしてください。リトライを参照してください。 - Go のバージョン: 最小バージョンが Go 1.24 から Go 1.22 に下がりました。

