API REST
Le plugin Irisolaris Map expose un ensemble d’endpoints REST pour les données cartographiques, le géocodage, la vérification d’éligibilité et l’intégration CRM. Cette page documente chaque endpoint, son format de réponse et la stratégie de mise en cache associée.
Vue d’ensemble des endpoints
Section intitulée « Vue d’ensemble des endpoints »Tous les endpoints appartiennent au namespace irisolaris-map/v1.
| Méthode | Route | Permission | Rôle |
|---|---|---|---|
GET | /data/map-theme | publique | JSON du thème de la carte (document de style MapLibre) |
GET | /plants | publique | Toutes les centrales actives en GeoJSON FeatureCollection |
GET | /plants/{id} | publique | Centrale unique en GeoJSON Feature |
GET | /density/{codgeo} | publique | Données de densité pour un code commune |
GET | /density/postcode/{postcode} | publique | Données de densité par code postal |
GET | /geocode | publique | Géocodage d’adresse via proxy BAN API |
POST | /check-eligibility | publique | Vérification complète d’éligibilité + création de lead |
POST | /import | manage_options | Import de centrales depuis un fichier CSV |
POST | /submit-join-form | publique | Soumission du formulaire d’adhésion à HubSpot |
Endpoints publics
Section intitulée « Endpoints publics »GET /plants
Section intitulée « GET /plants »Retourne toutes les centrales actives sous forme de GeoJSON FeatureCollection.
Format de réponse :
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Point", "coordinates": [lng, lat] }, "properties": { "id": 1234, "name": "Plant Name", "city": "City", "postcode": "75001", "region": "Île-de-France", "power": "250", "status": "En service", "active": 1 } } ]}Mise en cache :
- Cache par transient :
irisolaris_plants_geojson_{md5}(TTL de 7 jours pour les données completes, 1 jour pour les données filtrées) - En-tetes HTTP :
Cache-Control: public, max-age=1800+ support ETag/304 - La clé de cache inclut un numéro de version incrémenté à chaque sauvegarde/suppression de centrale
Champs exposés : Uniquement les métadonnées publiques (name, city, postcode, region, power, status, active). Les champs sensibles des centrales sont exclus de l’API publique et récupérés côté serveur uniquement en cas de besoin (par exemple, lors de la soumission d’un formulaire).
GET /plants/{id}
Section intitulée « GET /plants/{id} »Retourne une centrale unique sous forme de GeoJSON Feature. Meme structure de propriétés que l’endpoint de collection.
GET /data/map-theme
Section intitulée « GET /data/map-theme »Retourne le document de style MapLibre (JSON) depuis assets/json/. Utilisé pour configurer l’apparence de la carte et les sources de tuiles.
GET /geocode
Section intitulée « GET /geocode »Fait office de proxy pour les requetes de géocodage vers la Base Adresse Nationale (BAN API).
Parametres de requete :
q— Chaine de recherche d’adresse
Rôle : Proxy côté serveur pour éviter les problemes CORS et permettre au plugin de contrôler le comportement du géocodage.
GET /density/{codgeo}
Section intitulée « GET /density/{codgeo} »Recherche les données de densité pour un code commune INSEE dans la table irisolaris_density.
La réponse inclut : codgeo, libgeo, dens, dens7, libdens7 et d’autres indicateurs de densité.
GET /density/postcode/{postcode}
Section intitulée « GET /density/postcode/{postcode} »Recherche de densité rétrocompatible par code postal au lieu du code commune.
POST /check-eligibility
Section intitulée « POST /check-eligibility »Effectue une vérification d’éligibilité côté serveur. Valide la proximité de l’adresse par rapport aux centrales en utilisant des seuils de distance basés sur la densité, et crée optionnellement un enregistrement de lead.
POST /submit-join-form
Section intitulée « POST /submit-join-form »Soumet une demande d’adhésion au CRM HubSpot avec des données de centrale enrichies côté serveur.
Corps de la requete :
{ "plant_id": 1234, "company": "Company Name", "phone": "+33...", "email": "user@example.com", "zip": "75001", "city": "Paris", "pdl": "12345678901234", "nonce": "wp_nonce_value"}Enrichissement côté serveur : Le plugin récupere 14 champs meta sensibles de la centrale (work_id, project_name, SPV, address, PRM, lat/lng, power, tariff, perimeter, department, status) et les inclut dans la soumission HubSpot. Ces champs ne sont jamais exposés au client.
Payload HubSpot : 21 champs au total (7 provenant du client + 14 enrichis côté serveur).
Endpoints d’administration
Section intitulée « Endpoints d’administration »En complément des endpoints publics ci-dessus, un endpoint authentifié est disponible pour les administrateurs.
POST /import
Section intitulée « POST /import »Permission : manage_options (administrateurs uniquement)
Importe des centrales depuis un fichier CSV uploadé. Utilisé par l’interface d’import de l’administration.
Stratégie de mise en cache
Section intitulée « Stratégie de mise en cache »L’API REST utilise une approche de cache à deux niveaux — les transients WordPress pour les données côté serveur et les en-tetes HTTP pour le cache côté client.
Cache par transients
Section intitulée « Cache par transients »La réponse GeoJSON est mise en cache via les transients WordPress :
-
Clé de cache :
irisolaris_plants_geojson_{md5}où le hash MD5 inclut :- Les parametres de filtre (statut, région)
- Le numéro de version du cache (option
irisolaris_plants_cache_version)
-
TTL : 7 jours pour les requetes non filtrées, 1 jour pour les requetes filtrées
-
Invalidation : Stratégie d’incrémentation de version — lorsqu’une centrale est sauvegardée, supprimée ou que ses termes de taxonomie changent, le compteur de version est incrémenté. Les nouvelles requetes génèrent une nouvelle clé de cache (les anciens transients expirent naturellement).
Cache HTTP
Section intitulée « Cache HTTP »Les réponses REST incluent :
Cache-Control: public, max-age=1800(30 minutes)- En-tete
ETagbasé sur le hash du contenu - Réponses
304 Not Modifiedlorsque l’ETag correspond
Flux d’invalidation du cache
Section intitulée « Flux d’invalidation du cache »Trigger (save/delete plant, term change) └── API::invalidate_plants_cache() └── bump_cache_version() └── irisolaris_plants_cache_version += 1 └── Next GET /plants → new MD5 key → cache miss → fresh query