Przejdź do głównej zawartości

Szybki start w Pythonie

Ten przewodnik przeprowadzi Cię przez proces uwierzytelniania w API VaultPAM oraz wykonania pierwszego żądania przy użyciu Pythona.

Wymagania wstępne:

  • Python 3.8 lub nowszy
  • Biblioteka requests: pip install requests
  • Konto VaultPAM z włączonym dostępem do API

Krok 1 — Zainstaluj bibliotekę requests

pip install requests

Krok 2 — Uwierzytelnij się

import getpass
import os
import requests

BASE_URL = os.environ.get("VAULTPAM_BASE_URL", "https://api.vaultpam.com")

email = input("Email: ")
password = getpass.getpass("Password: ") # Never commit credentials to source control

response = requests.post(
f"{BASE_URL}/api/v1/auth/login",
json={"email": email, "password": password},
)
response.raise_for_status()

auth_data = response.json()
# Never commit — see auth-flow.md#token-storage
token = auth_data["access_token"]
expires_in = auth_data["expires_in"]
print(f"Authenticated. Token expires in {expires_in} seconds.")
Nigdy nie umieszczaj tokenów w repozytorium

Przechowuj token w menedżerze sekretów lub zmiennej środowiskowej — nigdy nie umieszczaj poświadczeń w kodzie na stałe. Zobacz Przechowywanie tokenów.


Krok 3 — Pobierz swoją aktywną organizację

org_response = requests.get(
f"{BASE_URL}/api/v1/org/memberships",
headers={"Authorization": f"Bearer {token}"},
)
org_response.raise_for_status()

org_data = org_response.json()
org_id = org_data["active_org_id"]
print(f"Active org: {org_id}")

Krok 4 — Wyświetl listę swoich sejfów

safes_response = requests.get(
f"{BASE_URL}/api/v1/safes",
headers={
"Authorization": f"Bearer {token}",
"X-Active-Org-Id": org_id,
},
)
safes_response.raise_for_status()

safes = safes_response.json()
print(f"Found {len(safes)} safe(s):")
for safe in safes:
print(f" - {safe.get('name', safe.get('id'))}")

Pełny przykład

import getpass
import os
import sys
import requests

BASE_URL = os.environ.get("VAULTPAM_BASE_URL", "https://api.vaultpam.com")


def get_session(base_url: str) -> tuple[str, str]:
"""Authenticate and return (token, org_id)."""
email = input("Email: ")
password = getpass.getpass("Password: ") # Never commit — see auth-flow.md#token-storage

resp = requests.post(f"{base_url}/api/v1/auth/login", json={"email": email, "password": password})
resp.raise_for_status()
token = resp.json()["access_token"]

org_resp = requests.get(f"{base_url}/api/v1/org/memberships", headers={"Authorization": f"Bearer {token}"})
org_resp.raise_for_status()
org_id = org_resp.json()["active_org_id"]

return token, org_id


def list_safes(base_url: str, token: str, org_id: str) -> list:
resp = requests.get(
f"{base_url}/api/v1/safes",
headers={"Authorization": f"Bearer {token}", "X-Active-Org-Id": org_id},
)
resp.raise_for_status()
return resp.json()


if __name__ == "__main__":
try:
token, org_id = get_session(BASE_URL)
safes = list_safes(BASE_URL, token, org_id)
print(f"Safes ({len(safes)}):")
for s in safes:
print(f" {s.get('name', s.get('id'))}")
except requests.HTTPError as exc:
print(f"API error {exc.response.status_code}: {exc.response.text}", file=sys.stderr)
sys.exit(1)

Obsługa błędów

raise_for_status() zgłasza wyjątek requests.HTTPError w przypadku odpowiedzi 4xx/5xx. Odwołaj się do exc.response.status_code oraz exc.response.text, aby uzyskać szczegóły:

KodZnaczenie
401 UnauthorizedToken jest brakujący, wygasł lub jest nieprawidłowy. Uwierzytelnij się ponownie.
403 ForbiddenToken nie ma wymaganego zakresu dla tego punktu końcowego.
429 Too Many RequestsPrzekroczono limit szybkości. Sprawdź nagłówek retry-after.
500 Internal Server ErrorPrzejściowy błąd serwera. Ponów próbę z wycofaniem (backoff).

Świadomość limitu szybkości

response = requests.get(
f"{BASE_URL}/api/v1/safes",
headers={"Authorization": f"Bearer {token}", "X-Active-Org-Id": org_id},
)
remaining = response.headers.get("x-ratelimit-remaining")
print(f"Rate limit remaining: {remaining}")

Zobacz Limity szybkości, aby poznać strategie wycofywania (backoff).


Następne kroki