Sur internet existent des sites proposant, parfois gratuitement, des micro-services sous forme d’API. Certains, très connus, sont présentés ici et sont compatibles avec Betula (les modifications sont minimes pour les rendre indépendantes).
RestCountries
Cette API renvoie, sous forme de JSON, une liste de pays selon certains critères de recherche. Cette API est open-source et il existe donc des « forks ». Ce premier article parle des deux principales :
- la version initiale rachetée par une entreprise de micro-services, donc devenue payante (dont l’utilisation des drapeaux en svg est mal prise en charge par WinDev) : https://restcountries.eu/#api-endpoints
- une autre hébergée de manière indépendante (qui a l’avantage d’avoir les drapeaux aussi en pnget plus de traductions) : https://restcountries.com/#api-endpoints-v3
sources
Les classes proposées de type « enregistrement » et « source de données » tel que décrites ici. Elles contiennent évidemment la structure de la réponse par JSON, les constantes disponibles, les filtres et les mots clés de recherche.
Le drapeau est lu dans un second temps soit par appel direct à la propriété p_bufDrapeau, soit via le paramètres bLitAussiMemo des constructeurs. Un traitement est fait pour redimensionner l’image si nécessaire et il est permis d’avoir un répertoire cache (pour éviter de charger les mêmes drapeaux à chaque fois).
Toujours dans l’idée d’améliorer la réactivité, il est possible de charger toute la liste des pays pour alimenter le membre global mg_tabPays. Les recherches subséquentes se font alors dans ce membre sans faire d’autres appels API.
Exemple pour remplir une combo des pays d’Europe par ordre alphabétique des pays, en français, accompagnés de leur drapeau :
clPays est un csdRestCountriesV3_com(*,fRepExe()+["\"]+"flags",16) SI clPays.Liste(ceRestCountriesV3_com.CodeISO3+ceRestCountriesV3_com.Nom+ceRestCountriesV3_com.Noms+ceRestCountriesV3_com.Drapeau,ceRestCountriesV3_com.Europe,*,csdRestCountriesV3_com.NomCommunFR_ASC) ALORS POUR TOUT pclPays DE clPays.m_tabPays ListeAjoute(COMBO_Pays1,gImage(pclPays.p_sDrapeau)+" "+pclPays.m_sNomCommunFR+gLien(pclPays.m_sCodeISO3)) FIN SINON Erreur(clPays.p_sErreur) FIN