Python (httpx / requests)
Aucun package Syvel requis — uniquement httpx ou requests.
Avec httpx
import osimport httpx
def check_email(email: str) -> dict | None: """ Retourne le résultat Syvel, ou None si l'API est indisponible. Toujours fail open : retourner None et laisser passer l'utilisateur. """ try: response = httpx.get( f"https://api.syvel.io/v1/check/{email}", headers={"Authorization": f"Bearer {os.environ['SYVEL_API_KEY']}"}, timeout=3.0, # 3 s max — ne jamais bloquer l'utilisateur ) if not response.is_success: return None # quota dépassé ou erreur serveur → fail open return response.json() except Exception: return None # erreur réseau ou timeout → fail open
# Dans une vue Django / FastAPI / Flask :result = check_email(email)
if result and result.get("is_risky"): raise ValidationError("Veuillez utiliser une adresse email professionnelle.")
# result est None → Syvel indisponible, laisser passer l'utilisateurDjango REST Framework
from rest_framework import serializersimport osimport httpx
class RegisterSerializer(serializers.Serializer): email = serializers.EmailField()
def validate_email(self, value): try: res = httpx.get( f"https://api.syvel.io/v1/check/{value}", headers={"Authorization": f"Bearer {os.environ['SYVEL_API_KEY']}"}, timeout=3.0, ) if res.is_success and res.json().get("is_risky"): raise serializers.ValidationError( "Veuillez utiliser une adresse email professionnelle." ) except httpx.RequestError: pass # fail open — Syvel indisponible, laisser passer return valueFastAPI (async)
from fastapi import FastAPI, HTTPExceptionimport osimport httpx
app = FastAPI()
async def check_email(email: str) -> dict | None: try: async with httpx.AsyncClient() as client: res = await client.get( f"https://api.syvel.io/v1/check/{email}", headers={"Authorization": f"Bearer {os.environ['SYVEL_API_KEY']}"}, timeout=3.0, ) if not res.is_success: return None return res.json() except Exception: return None
@app.post("/register")async def register(email: str): result = await check_email(email) if result and result.get("is_risky"): raise HTTPException( status_code=422, detail="Veuillez utiliser une adresse email professionnelle.", ) # continuer l'inscription…Avec requests
import osimport requests
def check_email(email: str) -> dict | None: try: response = requests.get( f"https://api.syvel.io/v1/check/{email}", headers={"Authorization": f"Bearer {os.environ['SYVEL_API_KEY']}"}, timeout=3, ) if not response.ok: return None return response.json() except Exception: return None