API ključevi
API ključevi su primarni metod za autentifikaciju na Brevo API. Oni pružaju jednostavan i bezbedan način da programski pristupite svom nalogu.
Šta su API ključevi?
API ključevi su jedinstveni identifikatori koji autentifikuju vašu aplikaciju kada šalje zahteve Brevo API-ju. Svaki ključ je niz od 64 znaka koji služi i kao identifikator i kao lozinka.
Example API key: xkeysib-a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456-Ab1Cd2Ef3Gh4Generisanje API ključeva
Vodič korak po korak
- Prijavite se na Brevo: Otvorite svoju Brevo komandnu tablu
- Idite na podešavanja: Kliknite na svoj profil → Settings
- Otvorite API ključeve: Izaberite „API Keys” iz levog menija
- Kreirajte novi ključ: Kliknite na „Generate a New API Key”
- Imenujte svoj ključ: Dajte mu opisan naziv (na primer „Production App”, „Development Testing”)
- Podesite dozvole: Izaberite odgovarajući nivo pristupa
- Generišite: Kliknite na „Generate” i odmah kopirajte ključ
Konvencije imenovanja API ključeva
Koristite opisne nazive koji vam pomažu da prepoznate namenu ključa:
production-web-appstaging-environmentmobile-app-ioswebhook-listenerdata-sync-service
Tipovi API ključeva i dozvole
Ključevi sa punim pristupom
Permissions: All API endpointsUse cases: Complete application integrationRisk level: High - protect carefullyKljučevi samo za čitanje
Permissions: GET requests onlyUse cases: Analytics, reporting, dashboardsRisk level: Low - limited accessKljučevi samo za slanje
Permissions: Transactional email sendingUse cases: Application notifications, receiptsRisk level: Medium - can send emailsKljučevi za upravljanje kontaktima
Permissions: Contact CRUD operationsUse cases: CRM integrations, form submissionsRisk level: Medium - data modificationKorišćenje API ključeva
Autentifikacija zaglavljem
Uključite svoj API ključ u zaglavlje api-key:
GET /v3/account HTTP/1.1Host: api.brevo.comAccept: application/jsonContent-Type: application/jsonapi-key: YOUR_API_KEYPrimeri koda
JavaScript/Node.js
const brevo = require('@getbrevo/brevo');
const apiInstance = new brevo.AccountApi();apiInstance.setApiKey(brevo.AccountApiApiKeys.apiKey, process.env.BREVO_API_KEY);
// Make authenticated requestapiInstance.getAccount() .then(data => console.log('Account info:', data)) .catch(error => console.error('Error:', error));Python
import sib_api_v3_sdkfrom sib_api_v3_sdk.rest import ApiException
# Configure API keyconfiguration = sib_api_v3_sdk.Configuration()configuration.api_key['api-key'] = 'YOUR_API_KEY'
# Create API instanceapi_instance = sib_api_v3_sdk.AccountApi(sib_api_v3_sdk.ApiClient(configuration))
try: # Get account info api_response = api_instance.get_account() print(api_response)except ApiException as e: print("Exception when calling AccountApi->get_account: %s\n" % e)PHP
<?phprequire_once(__DIR__ . '/vendor/autoload.php');
// Configure API key$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');
// Create API instance$apiInstance = new SendinBlue\Client\Api\AccountApi( new GuzzleHttp\Client(), $config);
try { $result = $apiInstance->getAccount(); print_r($result);} catch (Exception $e) { echo 'Exception when calling AccountApi->getAccount: ', $e->getMessage(), PHP_EOL;}?>Ruby
require 'sib-api-v3-sdk'
# Configure API keySibApiV3Sdk.configure do |config| config.api_key['api-key'] = 'YOUR_API_KEY'end
# Create API instanceapi_instance = SibApiV3Sdk::AccountApi.new
begin # Get account info result = api_instance.get_account puts resultrescue SibApiV3Sdk::ApiError => e puts "Exception when calling AccountApi->get_account: #{e}"endBezbednost API ključeva
Bezbedno čuvanje
Promenljive okruženja (preporučeno)
# .env fileBREVO_API_KEY=xkeysib-your-api-key-here
# Usage in codeconst apiKey = process.env.BREVO_API_KEY;Menadžeri tajni u oblaku
- AWS Secrets Manager
- Google Secret Manager
- Azure Key Vault
- HashiCorp Vault
Najbolje bezbednosne prakse
-
Nikada nemojte upisivati ključeve direktno u kod
// ❌ Bad - hardcodedconst apiKey = "xkeysib-a1b2c3d4...";// ✅ Good - environment variableconst apiKey = process.env.BREVO_API_KEY; -
Koristite različite ključeve po okruženju
Production: BREVO_API_KEY_PRODStaging: BREVO_API_KEY_STAGINGDevelopment: BREVO_API_KEY_DEV -
Redovno menjajte ključeve
- Postavite podsetnike u kalendaru za tromesečnu zamenu
- Koristite alate za automatizaciju zamene ključeva
- Pripremite plan za vraćanje na prethodno stanje
-
Pratite korišćenje ključeva
- Podesite upozorenja za neuobičajenu aktivnost
- Pregledajte dnevnike korišćenja ključeva jednom mesečno
- Pratite geografske obrasce pristupa
Upravljanje ključevima
Praćenje aktivnih ključeva
Pratite svoje aktivne ključeve na komandnoj tabli:
Key Name: production-web-appCreated: 2024-01-15Last Used: 2024-01-20 14:30 UTCRequests Today: 1,247Status: ActiveProces zamene ključa
- Generišite novi ključ: Kreirajte zamenski ključ
- Ažurirajte konfiguraciju: Postavite u produkciju sa novim ključem
- Pratite: Uverite se da novi ključ radi ispravno
- Period tolerancije: Zadržite stari ključ aktivnim 24 do 48 sati
- Opozovite stari ključ: Obrišite prethodni ključ
Hitno opozivanje ključa
Ako je ključ kompromitovan:
- Trenutno opozivanje: Obrišite ključ sa komandne table
- Generišite zamenu: Odmah kreirajte novi ključ
- Ažurirajte aplikacije: Postavite u produkciju sa novim ključem što pre
- Pratite aktivnost: Proverite da li je bilo neovlašćenog korišćenja
- Izveštaj o incidentu: Dokumentujte bezbednosni incident
Ograničenja broja zahteva i API ključevi
Svaki API ključ ima sopstvena ograničenja broja zahteva:
- Free plan: 300 zahteva dnevno
- Starter plan: 20.000 zahteva dnevno
- Business plan: 50.000 zahteva dnevno
- Enterprise plan: prilagođena ograničenja
Zaglavlja ograničenja broja zahteva
HTTP/1.1 200 OKX-RateLimit-Limit: 1000X-RateLimit-Remaining: 999X-RateLimit-Reset: 1640995200Rukovanje ograničenjima broja zahteva
async function makeApiCall() { try { const response = await fetch(url, { headers });
if (response.status === 429) { const resetTime = response.headers.get('X-RateLimit-Reset'); const waitTime = resetTime - Math.floor(Date.now() / 1000);
console.log(`Rate limited. Waiting ${waitTime} seconds`); await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
// Retry the request return makeApiCall(); }
return response.json(); } catch (error) { console.error('API call failed:', error); throw error; }}Rešavanje problema sa API ključevima
Česte poruke o greškama
Nevažeći API ključ (401)
{ "code": "unauthorized", "message": "Invalid API key provided"}Nedovoljne dozvole (403)
{ "code": "permission_denied", "message": "API key does not have required permissions"}Prekoračeno ograničenje broja zahteva (429)
{ "code": "too_many_requests", "message": "Rate limit exceeded for API key"}Kontrolna lista za otklanjanje grešaka
- Ključ je ispravno formatiran (64 znaka)
- Nema suvišnih razmaka ni skrivenih znakova
- Ključ ima potrebne dozvole
- Ključ je aktivan (nije opozvan)
- U okviru ste ograničenja broja zahteva
- Koristite ispravnu API krajnju tačku
- Zaglavlja su ispravno formatirana
Sledeći koraci
- Saznajte više o OAuth 2.0
- Upoznajte se sa JWT tokenima
- Istražite ograničenja broja zahteva
- Isprobajte SDK-ove