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​