Γρήγορη Εκκίνηση με Python
Αυτός ο οδηγός σας καθοδηγεί στην πιστοποίηση προς το VaultPAM API και στη διενέργεια του πρώτου αιτήματος χρησιμοποιώντας Python.
Προϋποθέσεις:
- Python 3.8 ή νεότερη έκδοση
- Βιβλιοθήκη
requests:pip install requests - Λογαριασμός VaultPAM με ενεργοποιημένη πρόσβαση API
Βήμα 1 — Εγκατάσταση της βιβλιοθήκης requests
pip install requests
Βήμα 2 — Πιστοποίηση
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.")
Μην αποθηκεύετε tokens ποτέ
Αποθηκεύστε το token σε ένα secrets manager ή μεταβλητή περιβάλλοντος — ποτέ μη δημοσιοποιείτε τα διαπιστευτήρια σκληρά. Δείτε Αποθήκευση Token.
Βήμα 3 — Λήψη του ενεργού οργανισμού σας
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}")
Βήμα 4 — Λίστα των Safes σας
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'))}")
Ολοκληρωμένο παράδειγμα
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)
Διαχείριση σφαλμάτων
Το raise_for_status() εγείρει requests.HTTPError σε απαντήσεις 4xx/5xx. Αποκτήστε πρόσβαση σε exc.response.status_code και exc.response.text για λεπτομέρειες:
| Κωδικός | Σημασία |
|---|---|
401 Unauthorized | Το token λείπει, έχει λήξει ή είναι άκυρο. Πιστοποιηθείτε ξανά. |
403 Forbidden | Το token δεν διαθέτει το απαιτούμενο scope για αυτό το endpoint. |
429 Too Many Requests | Υπέρβαση ορίου ρυθμού. Ελέγξτε την κεφαλίδα retry-after. |
500 Internal Server Error | Παροδικό σφάλμα διακομιστή. Επανάληψη με backoff. |
Επίγνωση ορίου ρυθμού
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}")
Δείτε Όρια Ρυθμού για στρατηγικές backoff.
Επόμενα βήματα
- Ροή Πιστοποίησης — πλήρης κύκλος ζωής token, PATs και ασφαλής αποθήκευση
- Γρήγορη Εκκίνηση curl — ίδια ροή χρησιμοποιώντας τη γραμμή εντολών
- Γρήγορη Εκκίνηση TypeScript — ίδια ροή χρησιμοποιώντας Node.js
- Όρια Ρυθμού — κατανόηση των κεφαλίδων
x-ratelimit-*