Passer au contenu

Python (httpx / requests)

Voir en Markdown

Aucun package Syvel requis — uniquement httpx ou requests.

Avec httpx

import os
import 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'utilisateur

Django REST Framework

from rest_framework import serializers
import os
import 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 value

FastAPI (async)

from fastapi import FastAPI, HTTPException
import os
import 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 os
import 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

Ressources

Dernière mise à jour :