Примеры кода
Готовые примеры интеграции на популярных языках и фреймворках.
Стандартизация ФИО
clean/name
import requestsAPI_KEY = "YOUR_API_KEY"BASE_URL = "https://api.humandata.ru/api/v1"def clean_name(query: str) -> dict:response = requests.post(f"{BASE_URL}/clean/name",json={"query": query},headers={"Authorization": f"Token {API_KEY}"})response.raise_for_status()return response.json()# Использованиеresult = clean_name("иванов сергей петрович")print(f"Фамилия: {result['result']['surname']}")print(f"Имя: {result['result']['name']}")print(f"Пол: {result['result']['gender']}")
Подсказки с debounce
React hook с debouncetypescript
import { useState, useEffect } from 'react';import { useDebounce } from '@/hooks/useDebounce';const API_KEY = "YOUR_API_KEY";export function useNameSuggestions(query: string) {const [suggestions, setSuggestions] = useState<string[]>([]);const [isLoading, setIsLoading] = useState(false);const debouncedQuery = useDebounce(query, 300);useEffect(() => {if (debouncedQuery.length < 2) {setSuggestions([]);return;}const fetchSuggestions = async () => {setIsLoading(true);try {const response = await fetch(`https://api.humandata.ru/api/v1/suggest/name?query=${encodeURIComponent(debouncedQuery)}`,{ headers: { Authorization: `Token ${API_KEY}` } });const data = await response.json();setSuggestions(data.suggestions.map(s => s.value));} catch (error) {console.error('Failed to fetch suggestions:', error);} finally {setIsLoading(false);}};fetchSuggestions();}, [debouncedQuery]);return { suggestions, isLoading };}
Batch обработка
Обработка списка ФИОpython
import requestsfrom concurrent.futures import ThreadPoolExecutorAPI_KEY = "YOUR_API_KEY"BASE_URL = "https://api.humandata.ru/api/v1"def clean_name(query: str) -> dict:response = requests.post(f"{BASE_URL}/clean/name",json={"query": query},headers={"Authorization": f"Token {API_KEY}"})return response.json()def batch_clean_names(names: list[str], max_workers: int = 5) -> list[dict]:"""Параллельная обработка списка ФИО."""with ThreadPoolExecutor(max_workers=max_workers) as executor:results = list(executor.map(clean_name, names))return results# Использованиеnames = ["иванов сергей петрович","петрова мария ивановна","сидоров иван"]results = batch_clean_names(names)for r in results:print(f"{r['source']} -> {r['result']['surname']} {r['result']['name']}")
Обработка ошибок
Retry с exponential backoffpython
import requestsimport timefrom functools import wrapsdef retry_with_backoff(max_retries: int = 3, backoff_factor: float = 1.0):"""Декоратор для retry с exponential backoff."""def decorator(func):@wraps(func)def wrapper(*args, **kwargs):for attempt in range(max_retries):try:return func(*args, **kwargs)except requests.exceptions.RequestException as e:if attempt == max_retries - 1:raisewait_time = backoff_factor * (2 ** attempt)print(f"Attempt {attempt + 1} failed, retrying in {wait_time}s...")time.sleep(wait_time)return wrapperreturn decorator@retry_with_backoff(max_retries=3)def clean_name_with_retry(query: str) -> dict:response = requests.post(f"{BASE_URL}/clean/name",json={"query": query},headers={"Authorization": f"Token {API_KEY}"},timeout=10)response.raise_for_status()return response.json()