−25%

kwa Windows ya mwaka, hadi 31 Okt. Tazama mipango

EQVPS
Anza

Marejeo ya API ya sandbox: SDK ya Python na TypeScript

Mbinu zote za SDK ya sandbox ya EQVPS kwenye ukurasa mmoja: vigezo, thamani za chaguo-msingi, kinachorudishwa na madaraja yote 11 ya hitilafu, kwa mfano ule ule katika Python na TypeScript.

Imethibitishwa mwisho: 2026-10-10 · SDK 0.2.0 (PyPI eqvps, npm @eqvps/sdk)

SDK ni tabaka jembamba juu ya REST API ya sandbox. Inakuepushia mambo matatu: kujenga maombi kwa mkono, kuyarudia jukwaa likiwa na shughuli nyingi, na kusahau kufuta sandbox msimbo unapotupa exception. Kila kitu hapa kinalingana na toleo 0.2.0 la vifurushi vyote viwili.

Kama hujawahi kuunda sandbox, mwongozo wa kuunganisha kwa dakika 5 utakupa tokeni kwanza. Sandbox ni nini na kuna nini ndani yake kumeelezwa kwenye Sandbox.

Kusakinisha na kusanidi

pip install eqvps          # Python 3.8+
npm i @eqvps/sdk           # Node.js 18+, Deno, Bun
export EQVPS_API_KEY=...   # your EQVPS account token

Programu ile ile kwa lugha zote mbili: unda sandbox, endesha msimbo, ifute.

from eqvps import Sandbox

with Sandbox.create(tariff="small") as sb:
    r = sb.run("print(2 + 2)")
    print(r.exit_code, r.stdout)   # 0 4
import { Sandbox } from "@eqvps/sdk";

await Sandbox.with({ tariff: "small" }, async (sb) => {
  const r = await sb.run("print(2 + 2)");
  console.log(r.exit_code, r.stdout); // 0 4
});

Kuunda na kupata sandbox

Sandbox.create(...) huwasha sandbox, kwa kawaida ndani ya takriban sekunde moja. Python hupokea hoja zenye majina, TypeScript hupokea kitu kimoja cha chaguo.

PythonTypeScriptChaguo-msingiMaana
modemode"ephemeral""ephemeral" (kwa sekunde) au "persistent" (kwa saa iliyoanzishwa, huhifadhi diski)
tarifftariff"small"micro, small, standard, plus, pro, max
idle_timeoutidleTimeout300sekunde bila shughuli kabla sandbox ya muda mfupi haijafutwa, hadi 3600
ttlttl—muda wa juu wa maisha kwa sekunde: hadi 86400 kwa ya muda mfupi, 2592000 kwa ya kudumu
envenv—vigezo vya mazingira kwa kila amri, huhifadhiwa vikiwa vimesimbwa
api_key, base_urlapiKey, baseUrlvigezo vya mazingirahuchukua nafasi ya EQVPS_API_KEY / EQVPS_API_URL
timeouttimeoutMssekunde 70muda wa kusubiri HTTP kwa kila ombi
max_retriesmaxRetries3majaribio ya kurudia kwa 429/503

Sandbox.connect(id) huunganisha na sandbox iliyopo, kwa kawaida ya kudumu uliyoiunda jana. Sandbox.list() hurudisha sandbox zote za akaunti, zinazoendesha na zilizositishwa.

Sifa: id (sb_ + herufi 24 za hex), mode, tariff, state (running, starting, paused, pausing, resuming, deleting, deleted), env_keys / envKeys (majina tu, thamani hazirudishwi kamwe) na info (kitu ghafi). refresh() huzipakia upya.

kill() hufuta sandbox na kusimamisha malipo. Kuiita kwa sandbox ambayo tayari haipo si hitilafu.

Kuendesha msimbo

run(code, language="python", timeout=30) hutuma msimbo kupitia stdin kwa Python 3.12, Node.js 22 au bash ("python", "node", "bash"). exec(command, cwd=None, stdin=None, timeout=30) huendesha amri ya shell: mfuatano wa herufi hupita bash -lc, orodha huendeshwa kama argv bila shell.

Zote mbili hurudisha ExecResult:

UgaMaana
exit_codeexit code ya mchakato
stdout, stderrmatokeo, hadi MiB 1 kwa kila mkondo
timed_outamri ilifikia muda wake wa mwisho
truncatedmatokeo yalikatwa
duration_msmuda ilioendeshwa
okexit_code == 0 na bila kupita muda

Mwito wa wakati mmoja (synchronous) huendeshwa si zaidi ya sekunde 55. Mbinu zote mbili pia hupokea env kwa mwito huo tu; huchukua nafasi ya thamani zilizowekwa wakati wa kuunda.

Kazi ndefu: kazi za chinichini

Pitisha background=True (TypeScript: { background: true }) na mara moja unapata Task. Haina kikomo cha sekunde 55 na inaweza kuendelea hadi maisha ya sandbox yaishe. Hadi kazi 8 kwa kila sandbox.

task = sb.exec("cd /root/app && python3 -m pytest -q", background=True)
result = task.wait(on_output=lambda out, err: print(out, end=""))
print(result.state, result.exit_code)   # done 0
const task = await sb.exec("cd /root/app && npm test", { background: true });
const result = await task.wait({ onOutput: (out) => process.stdout.write(out) });
MbinuInachofanya
task.logs()stdout na stderr mpya tangu mwito uliopita
task.status()hali bila kutumia matokeo: running, done, failed, killed, timeout
task.wait(timeout, poll_interval=2, on_output)huuliza hadi kazi iishe, hurudisha TaskResult
task.kill()husimamisha kazi na michakato yake
sb.task(id) / sb.tasks()kuunganisha tena na kazi / orodha ya kazi

wait ikifikia muda wake yenyewe, hutupa SandboxTimeoutError, lakini kazi inaendelea. Kazi inayoendelea pia huzuia sandbox ya muda mfupi kufutwa kwa kukosa shughuli.

Faili na matumizi

upload(path, content, mode=None) huandika faili kwenye njia kamili na hurudisha ukubwa wake. download(path) hurudisha baiti, download_text(path) / downloadText(path) hurudisha mfuatano wa herufi. Uhamisho mmoja una kikomo cha MB 5.

usage() hurudisha sekunde za kuendesha, sekunde za CPU zilizotumika, baiti zinazotoka, bei kwa saa, billed_usd na estimated_total_usd. tariffs() ni kitendakazi cha kawaida kisichohitaji ufunguo, hurudisha bei na vikomo vya sasa. Kanuni za malipo ziko kwenye Vikomo na malipo ya sandbox.

Hitilafu

Kila hitilafu ya API ni daraja dogo la EqvpsError lenye status (HTTP), code (mfuatano thabiti) na body. retry_after / retryAfter hujazwa seva ikiutuma.

DarajaHTTPcode ya kawaidaCha kufanya
AuthenticationError401unauthenticatedkagua tokeni
InsufficientBalanceError402insufficient_balanceongeza salio
NotFoundError404not_foundid si sahihi, au faili haipo
SandboxPausedError409sandbox_pausedimesitishwa kwa sababu salio liliisha; inaendelea baada ya kuongeza salio
SandboxDeletedError410sandbox_deletedimefutwa kabisa
FileTooLargeError413file_too_largeweka uhamisho chini ya MB 5
ValidationError422invalid_requestrekebisha vigezo
RateLimitError429too_many_concurrent, too_many_tasks, rate_limitedsubiri kisha jaribu tena
BudgetExceededError429budget_exceededkikomo chako cha kila siku au kila mwezi cha sandbox kimefikiwa
CapacityError503capacityjaribu tena baada ya muda mfupi au chagua kifurushi kidogo
SandboxTimeoutError—request_timeout, wait_timeoutombi la HTTP (au wait) ndilo lililopita muda, si amri

Vikomo viwili husababisha 429 nyingi: akaunti huendesha amri 2 kwa wakati mmoja na hushikilia hadi sandbox 20. SDK hujaribu tena seva inaposema muda wa kusubiri; baada ya majaribio matatu unapata exception.

Wakati huhitaji SDK

Lugha yoyote yenye mteja wa HTTP inaweza kuita API moja kwa moja; endpoints ziko kwenye faili ya OpenAPI katika https://eqvps.com/openapi.json. Mawakala ndani ya Claude, Cursor au wateja wengine wa MCP hawahitaji msimbo wowote: seva ya MCP ina zana zile zile za sandbox. Na ukitaka tu kuona inavyofanya kazi, ukurasa wa sandbox unaonyesha vifurushi na jaribio la $1 kwa akaunti mpya.

Maswali yanayoulizwa mara kwa mara

SDK inaunga mkono matoleo gani ya Python na Node.js?

Kifurushi cha Python kinahitaji Python 3.8 au mpya zaidi na hakina utegemezi. Kifurushi cha TypeScript nacho hakina utegemezi na kinaendeshwa kwenye Node.js 18+, Deno, Bun na vivinjari vyenye fetch.

SDK inapata wapi ufunguo wangu wa API?

Kutoka kwenye hoja api_key / apiKey au kutoka kwenye kigezo cha mazingira EQVPS_API_KEY. Ufunguo ni tokeni ya kawaida ya akaunti ya EQVPS. EQVPS_API_URL hubadilisha anwani ya API; inahitajika kwa majaribio tu.

Je, SDK hujaribu tena maombi yaliyoshindwa?

Hujaribu tena 429 na 503 hadi mara 3 seva inapotuma Retry-After, ikisubiri si zaidi ya sekunde 30 kila mara. Hali hizo zinamaanisha ombi lilikataliwa kabla chochote hakijaendeshwa, kwa hiyo kujaribu tena run na exec ni salama. Hitilafu za mtandao hujaribiwa tena kwa GET tu; run, exec na upload hazitumwi mara mbili kamwe.

Je, exit code isiyo sifuri ni hitilafu (exception)?

Hapana. run na exec hurudisha matokeo yenye exit_code, stdout na stderr. Angalia result.ok au result.exit_code. Exception hutokea tu kwa hitilafu za API, kama salio tupu au tokeni batili.

Nitahakikishaje sandbox inafutwa msimbo wangu ukianguka?

Tumia muundo wenye wigo: with Sandbox.create() as sb katika Python, Sandbox.with(options, fn) au await using katika TypeScript. Sandbox hufutwa kizuizi kinapoisha, hata baada ya exception.

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.