API des Médicaments Français
API haute performance avec parsing concurrent en ~0.5s, 470K alg/380K real req/sec, et 30-50MB RAM stable. Accès aux 15K+ médicaments français avec mises à jour atomiques zero-downtime et cache intelligent.
Introduction
Cette API transforme les 5 fichiers TSV de la Base de Données Publique des Médicaments (BDPM) en une interface RESTful ultra-performante. Parsing concurrent des sources en **~0.5 secondes** avec validation croisée et structuration automatique via atomic operations pour garantir des mises à jour zero-downtime. Architecture optimisée pour **380K req/sec** avec seulement **30-50MB RAM** stable.
Architecture modulaire basée sur 6 interfaces principales (HTTPHandler, HealthChecker, DataValidator, Parser, Scheduler, DataManager) avec dependency injection. Les données sont indexées en O(1) via maps CIS-based pour des recherches instantanées, avec cache HTTP intelligent (ETag/Last-Modified) et compression gzip.
🚀 Démarrage Rapide
# Base URL
BASE_URL="https://medicaments-api.giygas.dev"
# Authentication: None required
# Rate limits: 1000 tokens/IP, 3 tokens/sec recharge
# Costs: /health (5), /medicament/* (100), /database (200), others (20)
curl https://medicaments-api.giygas.dev/medicament/paracetamol
curl https://medicaments-api.giygas.dev/database/1
curl https://medicaments-api.giygas.dev/health
Documentation & Code Source
Vous voulez commencer ? Jetez un œil à la documentation pour intégrer l'API dans vos projets, ou parcourez le code source pour voir comment tout fonctionne.
Fonctionnalités Principales
Recherche ultra-rapide
Recherche par nom (regex supporté) ou CIS avec O(1) lookup. Validation stricte (3-50 chars alphanumériques) et échappement automatique. Temps de réponse : <100ms (nom) et <50ms (CIS).
GET /medicament/paracetamol
Pagination & Base complète
Pagination optimisée (10 éléments/page) avec métadonnées complètes. Base complète accessible (23MB, ~2.1s). Cache HTTP 6h avec ETag/Last-Modified et compression gzip pour un transfert efficace.
GET /database/{pageNumber}
Mises à jour atomiques ultra-rapides
Parsing concurrent de 5 fichiers TSV BDPM en **~0.5 secondes** avec atomic.Value pour zero-downtime updates. Mises à jour automatiques 2x/jour (6h/18h) sans interruption de service. Architecture basée sur 6 interfaces avec dependency injection et 70%+ de couverture de tests.
Zero-downtime ~0.5s ⚡
Données BDPM complètes
15K+ médicaments, 1.6K groupes génériques. Toutes les entités BDPM : compositions, présentations, génériques, conditions, voies d'administration. Mémoire optimisée : 30-50MB stable (150MB peak au démarrage).
23MB dataset, 30-50MB RAM
Performance exceptionnelle
Architecture optimisée pour **391K requêtes/seconde** sur les endpoints critiques. Lookup O(1) en ~2.6µs via maps mémoire, compression gzip 80%, et cache HTTP intelligent avec 90%+ hit ratio. Tests complets avec 70%+ couverture.
380K req/sec ⚡
Cache HTTP intelligent
Cache avancé avec ETag/Last-Modified et support 304 Not Modified. Compression gzip (80% réduction bande passante). Cache hit ratio 90%+. Invalidation automatique durant les mises à jour.
90%+ cache hit ratio
Points de terminaison
Endpoint | Description | Cache | Coût |
---|---|---|---|
GET /database
|
Base complète (15,803 médicaments) | 6h | 200 |
GET /database/{page}
|
Pagination (10 éléments/page) | 6h | 20 |
GET /medicament/{nom}
|
Recherche par nom (regex) | 1h | 100 |
GET /medicament/id/{cis}
|
Recherche par identifiant CIS | 12h | 100 |
GET /generiques/{libelle}
|
Génériques par libellé | 1h | 20 |
GET /generiques/group/{id}
|
Groupe générique par ID | 12h | 20 |
GET /health
|
État de santé avancé (data+system) | - | 5 |
Exemples d'utilisation
Découvrez comment utiliser l'API avec ces exemples pratiques dans différents langages.
📡 Recherche de médicaments
curl "https://medicaments-api.giygas.dev/medicament/paracetamol"
const response = await fetch('https://medicaments-api.giygas.dev/medicament/paracetamol');
const data = await response.json();
console.log(`Found ${data.length} medicaments`);
import requests
response = requests.get('https://medicaments-api.giygas.dev/medicament/paracetamol')
data = response.json()
print(f"Found {len(data)} results")
⚠️ Réponses d'Erreur
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
{
"code": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded"
}
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"code": 404,
"error": "Not Found",
"message": "No medicaments found"
}
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"code": 400,
"error": "Bad Request",
"message": "Invalid page number"
}
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"code": 400,
"error": "Bad Request",
"message": "input contains invalid characters"
}
✅ Règles de Validation
- Longueur : 3-50 caractères
- Caractères autorisés : Lettres, chiffres, espaces, tirets (-), apostrophes ('), points (.)
- Interdits : Chaînes vides, caractères spéciaux (@, #, $, %, etc.)
- Sensibilité à la casse : Recherche insensible à la casse
✅ "paracetamol"
- Valide
✅ "Doliprane 500mg"
- Valide
✅ "abc"
- Valide (minimum 3 caractères)
❌ "paracetamol@xyz"
- Invalide (contient @)
❌ ""
- Invalide (vide)
❌ "ab"
- Invalide (trop court)
❌ "a"*51
- Invalide (trop long)
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"code": 400,
"error": "Bad Request",
"message": "input contains invalid characters"
}
📋 Formats de Réponse
GET /medicament/{name}
Response: [...] // Direct array of medicament objects
GET /medicament/id/{cis}
Response: {...} // Single medicament object or error
GET /generiques/{libelle}
Response: [{"groupID": ..., "libelle": ..., "medicaments": [...]}]
GET /generiques/group/{id}
Response: {"groupID": ..., "libelle": ..., "medicaments": [...]}
GET /database/{page}
Response: {
"data": [...],
"page": 1,
"pageSize": 10,
"totalItems": 15803,
"maxPage": 1581
}
💊 Exemple de réponse - Recherche par nom
curl "https://medicaments-api.giygas.dev/medicament/codoliprane"
[
{
"cis": 60904643,
"elementPharmaceutique": "CODOLIPRANE 500 mg/30 mg, comprimé",
"formePharmaceutique": "comprimé",
"voiesAdministration": ["orale"],
"statusAutorisation": "Autorisation active",
"typeProcedure": "Procédure nationale",
"etatComercialisation": "Commercialisée",
"dateAMM": "10/05/2013",
"titulaire": "OPELLA HEALTHCARE FRANCE",
"surveillanceRenforce": "Non",
"composition": [
{
"cis": 60904643,
"elementPharmaceutique": "comprimé",
"codeSubstance": 2202,
"denominationSubstance": "PARACÉTAMOL",
"dosage": "500 mg",
"referenceDosage": "un comprimé",
"natureComposant": "SA"
},
{
"cis": 60904643,
"elementPharmaceutique": "comprimé",
"codeSubstance": 1240,
"denominationSubstance": "CAFÉINE",
"dosage": "30 mg",
"referenceDosage": "un comprimé",
"natureComposant": "SA"
}
],
"generiques": [],
"presentation": [
{
"cis": 60904643,
"cip7": 3400936403114,
"cip13": 3400936403114,
"libelle": "CODOLIPRANE 500 mg/30 mg, comprimé (16)",
"statusAdministratif": "Présentation active",
"etatComercialisation": "Commercialisée",
"dateDeclaration": "19/01/1965",
"agreement": "non",
"tauxRemboursement": "65%",
"prix": 3.85
}
],
"conditions": []
}
]
🔄 Exemple de réponse - Génériques
curl "https://medicaments-api.giygas.dev/generiques/paracetamol"
[
{
"groupID": 1643,
"libelle": "PARACETAMOL 500 mg + CODEINE (PHOSPHATE DE) HEMIHYDRATE 30 mg - DAFALGAN CODEINE, comprimé pelliculé",
"medicaments": [
{
"cis": 66003374,
"elementPharmaceutique": "DAFALGAN CODEINE, comprimé pelliculé",
"formePharmaceutique": "comprimé pelliculé",
"type": "Princeps",
"composition": [
{
"elementPharmaceutique": "comprimé",
"substance": "PARACÉTAMOL",
"dosage": "500 mg"
},
{
"elementPharmaceutique": "comprimé",
"substance": "CODÉINE (PHOSPHATE DE) HÉMIHYDRATÉ",
"dosage": "30 mg"
}
]
},
{
"cis": 69458587,
"elementPharmaceutique": "PARACETAMOL/CODEINE BIOGARAN 500 mg/30 mg, comprimé",
"formePharmaceutique": "comprimé",
"type": "Générique",
"composition": [
{
"elementPharmaceutique": "comprimé",
"substance": "PARACÉTAMOL",
"dosage": "500 mg"
},
{
"elementPharmaceutique": "comprimé",
"substance": "CODÉINE (PHOSPHATE DE) HÉMIHYDRATÉ",
"dosage": "30 mg"
}
]
}
]
}
]
🏥 Exemple de réponse - Health Check
{
"status": "healthy",
"last_update": "2025-10-05T22:04:32+02:00",
"data_age_hours": 1.4483066186805555,
"uptime_seconds": 86400.000000375,
"data": {
"api_version": "1.0",
"generiques": 1618,
"is_updating": false,
"medicaments": 15803,
"next_update": "2025-10-06T06:00:00+02:00"
},
"system": {
"goroutines": 10,
"memory": {
"alloc_mb": 31,
"num_gc": 60,
"sys_mb": 187,
"total_alloc_mb": 264
}
}
}
Technologies Utilisées
Mentions Légales
📋 Conditions d'utilisation
- • Usage non-commercial et éducatif privilégié
- • Mention obligatoire de la source BDPM
- • Aucune altération des données originales
- • Service fourni "as-is" sans garantie SLA