<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Backend - Winzana</title>
	<atom:link href="https://www.winzana.com/category/backend/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.winzana.com</link>
	<description>Façonnons le numérique à votre image</description>
	<lastBuildDate>Wed, 13 May 2026 09:00:21 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.winzana.com/wp-content/uploads/2025/04/logo-winzana.svg</url>
	<title>Backend - Winzana</title>
	<link>https://www.winzana.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>La dette technique n’est pas le problème (tant qu’elle est pilotée)</title>
		<link>https://www.winzana.com/la-dette-technique-nest-pas-le-probleme-tant-quelle-est-pilotee/</link>
					<comments>https://www.winzana.com/la-dette-technique-nest-pas-le-probleme-tant-quelle-est-pilotee/#respond</comments>
		
		<dc:creator><![CDATA[Vincent Journel]]></dc:creator>
		<pubDate>Fri, 27 Feb 2026 13:34:36 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Backend]]></category>
		<category><![CDATA[Frontend]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241711</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_0 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_0 et_pb_row et_block_row"><div class="et_pb_column_0 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><div>
<div>
<div>
<div>
<p>Architecture &amp; delivery / <span>Dette technique</span></p>
<p>&nbsp;</p>
<p><strong><br />La dette technique n’est pas le vrai problème.<br />Le vrai problème, c’est de faire comme si elle n’existait pas…<br />ou de vouloir l’éliminer à tout prix.<br /></strong></p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Le combat intérieur de tout développeur</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Pour beaucoup de développeurs, accepter la dette technique est un combat.</p>
<p>&nbsp;</p>
<p>Accepter de dire :</p>
<blockquote>
<p><strong><br />“Stop. Là, je livre quelque chose de fonctionnel,<br />même si ce n’est pas parfait.”<br /></strong></p>
</blockquote>
<p>Ce n’est pas naturel.<br />Parce qu’on a tous cette envie : finir proprement, factoriser, optimiser, réécrire “comme il faut”.</p>
<p>&nbsp;</p>
<p>Je développe des solutions depuis plus de 15 ans, et je lutte encore aujourd’hui contre cette pulsion.<br />Celle de vouloir toujours améliorer, toujours réinventer, toujours “faire mieux”.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>La claque YAGNI (et pourquoi ça fait mal)</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Je me souviens très bien d’une discussion avec un manager qui me disait :</p>
<blockquote>
<p><strong>“Mon paradigme, c’est <a href="https://fr.wikipedia.org/wiki/YAGNI#:~:text=YAGNI%20(anglicisme%2C%20acronyme%20anglais%20de,n'est%20pas%20absolument%20n%C3%A9cessaire.">YAGNI</a>.”</strong></p>
</blockquote>
<p>YAGNI signifie<br /><em>You Aren’t Gonna Need It</em> : ne développe pas ce dont tu n’as pas besoin maintenant.</p>
<p>&nbsp;</p>
<p>À l’époque, je me suis dit : “En fait, ce mec est juste un sagouin. Il code sale, il ne veut pas faire les choses bien.”</p>
<p>&nbsp;</p>
<p>Et puis, avec le recul, j’ai compris qu’il avait raison.</p>
<p>&nbsp;</p>
<p>Pas parce qu’il fallait mal faire son travail. Mais parce que, dans un projet, ce qui compte avant tout, c’est de sortir sur le marché.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Le vrai enjeu : le go-to-market, pas la perfection</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Un logiciel n’existe vraiment que lorsqu’il est utilisé.</p>
<p>&nbsp;</p>
<p>Tant qu’il est dans un dépôt Git, aussi élégant soit-il, il ne crée aucune valeur.</p>
<p>&nbsp;</p>
<p>Le go-to-market est donc prioritaire :</p>
<blockquote>
<p><strong>Livrer vite</strong></p>
<p><strong>Tester le marché</strong></p>
<p><strong>Générer du business</strong></p>
</blockquote>
<p>Et c’est là que la dette technique devient acceptable.<br />Parce que coder “aux petits oignons” une fonctionnalité que le client jettera dans trois mois est une perte de temps et d’argent.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Quand la dette devient réellement dangereuse</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Le problème n’est pas la dette en soi. Le problème, c’est la dette non pilotée.</p>
<p>&nbsp;</p>
<p>J’ai vu des sociétés incapables de pivoter après plusieurs années de développement.</p>
<p>&nbsp;</p>
<p>Pourquoi ?</p>
<blockquote>
<p><strong>dépendances dans tous les sens</strong></p>
<p><strong>code figé</strong></p>
<p><strong>architecture impossible à faire évoluer</strong></p>
</blockquote>
<p>À ce stade, ajouter une fonctionnalité ou faire une migration devient un cauchemar.</p>
<p>&nbsp;</p>
<p>Là, oui, la dette technique devient un vrai problème business.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Première règle : rendre la dette visible</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Une dette invisible est une dette dangereuse.</p>
<p>&nbsp;</p>
<p>Et là, je vais dire un truc que beaucoup de développeurs sous-estiment :</p>
<blockquote>
<p><strong>les TODO dans le code sont importants</strong></p>
</blockquote>
<p>Un TODO ne veut pas dire “j’ai mal travaillé”.</p>
<p>&nbsp;</p>
<p>Ça veut dire : “je sais qu’il y a un compromis ici, et je veux pouvoir y revenir”.</p>
<p>&nbsp;</p>
<p>Aujourd’hui, en plus, ces annotations peuvent être relues par des outils, par des LLM, et servir de points d’entrée pour de futurs refactorings.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Deuxième règle : consigner la dette dans un backlog</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>La dette ne doit pas rester dans la tête des développeurs.</p>
<p>Elle doit être :</p>
<blockquote>
<p><strong>discutée avec les tech leads</strong></p>
<p><strong>partagée avec le chef de projet</strong></p>
<p><strong>consignée dans un backlog</strong></p>
</blockquote>
<p>Refactoring envisagé, amélioration possible, dette acceptée temporairement: tout doit être écrit.</p>
<p>&nbsp;</p>
<p>Et surtout : ne jamais céder aux pulsions.</p>
<p>&nbsp;</p>
<p>Relire un backlog avec un peu de recul permet souvent de se rendre compte que certaines refontes n’étaient finalement pas si utiles.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>La dette comme levier business</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>La dette technique, quand elle est maîtrisée, est un levier.</p>
<p>&nbsp;</p>
<p>Elle permet :</p>
<blockquote>
<p><strong>d’aller plus vite</strong></p>
<p><strong>de tester des hypothèses</strong></p>
<p><strong>de financer la suite grâce au business</strong></p>
</blockquote>
<p>Parce que, soyons honnêtes : vous devez rentrer de l’argent.</p>
<p>&nbsp;</p>
<p>Votre client doit faire du business avec le logiciel que vous livrez.</p>
<p>&nbsp;</p>
<p>Et ce sont ces revenus qui permettront plus tard de nettoyer, refactorer, consolider.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>L’architecture comme filet de sécurité</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Toutes les dettes ne se valent pas.</p>
<p>&nbsp;</p>
<p>Une architecture bien pensée permet de vivre beaucoup plus sereinement avec la dette.</p>
<p>&nbsp;</p>
<p>Des approches comme :</p>
<blockquote>
<p><strong>DDD</strong></p>
<p><strong>SOA / macro-services</strong></p>
<p><strong>architecture hexagonale</strong></p>
</blockquote>
<p>permettent d’isoler les compromis, de faire évoluer certaines parties sans tout casser.</p>
<p>&nbsp;</p>
<p>C’est exactement ce qu’on a fait sur plusieurs plateformes chez Winzana : accepter des dettes locales, sans mettre en danger l’ensemble.</p>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Conclusion</h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>La dette technique n’est pas un échec.</p>
<p>&nbsp;</p>
<p>Elle devient un problème uniquement quand elle est ignorée, subie, ou niée.</p>
<p>&nbsp;</p>
<p>Acceptez-la,<br />rendez-la visible,<br />consignez-la,<br />pilotez-la.</p>
<p>&nbsp;</p>
<p>Et surtout : ne sacrifiez jamais votre go-to-market pour une perfection que personne ne vous a demandée.</p>
<p>&nbsp;</p>
<p>La maturité technique, ce n’est pas l’absence de dette.<br />C’est la capacité à vivre avec, intelligemment.</p>
</div>
</div>
</div>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/la-dette-technique-nest-pas-le-probleme-tant-quelle-est-pilotee/">La dette technique n’est pas le problème (tant qu’elle est pilotée)</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/la-dette-technique-nest-pas-le-probleme-tant-quelle-est-pilotee/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>API-first : réussir ses intégrations (ERP/CRM/paiement) sans blocage</title>
		<link>https://www.winzana.com/api-first-reussir-ses-integrations-erp-crm-paiement-sans-blocage/</link>
					<comments>https://www.winzana.com/api-first-reussir-ses-integrations-erp-crm-paiement-sans-blocage/#respond</comments>
		
		<dc:creator><![CDATA[Vincent Journel]]></dc:creator>
		<pubDate>Fri, 23 Jan 2026 18:30:00 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Backend]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241629</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_2 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_2 et_pb_row et_block_row"><div class="et_pb_column_2 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_2 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><h2>Architecture logicielle / <strong>API-first &amp; intégrations</strong></h2>
<p><strong>Les intégrations ne bloquent pas les projets par accident. Elles bloquent quand l’API n’a jamais été pensée comme un produit.</strong></p>
<h2>Pourquoi les intégrations sont le premier point de friction</h2>
<p>ERP, CRM, paiement, outils tiers, partenaires… Très peu de produits vivent aujourd’hui en vase clos. Pourtant, dans beaucoup de projets, l’API arrive après l’UI, après le modèle de données et après les premières décisions techniques.</p>
<p>Résultat : l’intégration devient un chantier à part, coûteux, fragile, et souvent source de blocages projet.</p>
<h2>API-first : ce que ça veut vraiment dire (et ce que ce n’est pas)</h2>
<p>API-first ne signifie pas “exposer une API plus tard”. Cela signifie :</p>
<blockquote><p>
    <strong>concevoir les contrats avant l’implémentation</strong><br />
    <strong>penser les usages avant les écrans</strong><br />
    <strong>stabiliser les échanges avant d’optimiser l’interne</strong>
</p></blockquote>
<p>L’API devient un produit à part entière, consommé par l’UI, les intégrations et parfois des tiers.</p>
<h2>Erreur classique : confondre API et CRUD exposé</h2>
<p>Beaucoup d’API se contentent d’exposer la base de données (create, read, update, delete). Le problème ? Les systèmes externes ne pensent pas en tables, ils pensent en processus métier. Une bonne API expose :</p>
<blockquote><p>
    <strong>des intentions métier</strong><br />
    <strong>des règles claires</strong><br />
    <strong>des invariants protégés</strong>
</p></blockquote>
<p>Une mauvaise API délègue la complexité aux intégrateurs.</p>
<h2>Intégrer un ERP : penser robustesse avant élégance</h2>
<p>Les ERP sont rarement temps réel. Ils sont souvent lents, verbeux et imprévisibles. Une API ERP-friendly doit prévoir :</p>
<blockquote><p>
    <strong>des appels idempotents</strong><br />
    <strong>des traitements asynchrones</strong><br />
    <strong>des mécanismes de reprise</strong>
</p></blockquote>
<p>Si votre API suppose que “tout répond vite et bien”, l’intégration ERP finira par casser en production.</p>
<h2>Intégrer un CRM : gérer l’asymétrie des données</h2>
<p>CRM et produit n’ont pas la même vision du client et ne seront jamais parfaitement synchrones. Une bonne approche API-first implique des identifiants stables, des règles claires de source de vérité et des mécanismes de synchronisation explicites. Sans cela, les doublons et les incohérences sont inévitables.</p>
<h2>Intégrer le paiement : ne jamais faire confiance par défaut</h2>
<p>Le paiement est un cas à part. Tout ce qui peut arriver… arrivera. Une API paiement robuste doit gérer les webhooks en double, les délais réseau, les états intermédiaires et la réconciliation. Si votre modèle suppose un paiement synchrone et fiable, la production vous rappellera vite à l’ordre.</p>
<h2>Versionner une API sans bloquer les intégrations</h2>
<p>Une API non versionnée finit par bloquer tout le monde. Les bonnes pratiques consistent à versionner les contrats (pas uniquement les URLs), éviter les "breaking changes" silencieux et maintenir plusieurs versions si nécessaire. Une API stable inspire confiance.</p>
<h2>Observabilité : voir les intégrations avant qu’elles ne cassent</h2>
<p>Les intégrations se dégradent souvent avant d'échouer brutalement. Une API exploitable doit fournir des logs corrélés, des métriques par partenaire et des alertes orientées usage. Sans cela, chaque incident devient une enquête manuelle fastidieuse.</p>
<h2>Checklist CTO pour une approche API-first sans blocage</h2>
<p>Avant de valider une intégration, voici les points essentiels :</p>
<ul>
<li>Des contrats d’API clairs et documentés</li>
<li>Une gestion explicite des erreurs</li>
<li>Des appels idempotents</li>
<li>Une stratégie asynchrone quand nécessaire</li>
<li>Une politique de versioning et une observabilité réelle</li>
</ul>
<h2>Conclusion</h2>
<p>API-first n’est pas un luxe d’architecte, c’est une condition de survie quand le produit s’intègre à un écosystème réel. Une bonne API rend les intégrations prévisibles, maintenables et évolutives. Elles ne sont pas un “plus”, elles font partie intégrante du produit.</p>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/api-first-reussir-ses-integrations-erp-crm-paiement-sans-blocage/">API-first : réussir ses intégrations (ERP/CRM/paiement) sans blocage</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/api-first-reussir-ses-integrations-erp-crm-paiement-sans-blocage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Générer des tests avec l’IA : ce qui marche, ce qui casse, et comment valider</title>
		<link>https://www.winzana.com/generer-des-tests-avec-lia-ce-qui-marche-ce-qui-casse-et-comment-valider/</link>
					<comments>https://www.winzana.com/generer-des-tests-avec-lia-ce-qui-marche-ce-qui-casse-et-comment-valider/#respond</comments>
		
		<dc:creator><![CDATA[Vincent Journel]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 09:30:00 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Tests]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241624</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_4 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_4 et_pb_row et_block_row"><div class="et_pb_column_4 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_4 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><h2>IA &amp; qualité logicielle / <strong>Tests automatisés</strong></h2>
<p><strong>Générer des tests avec l’IA peut faire gagner beaucoup de temps… ou donner une fausse impression de qualité si on ne sait pas ce qu’on fait.</strong></p>
<h2>Pourquoi tout le monde veut générer des tests avec l’IA</h2>
<p>Écrire des tests est rarement la partie préférée des équipes. C’est long, parfois ingrat, et ça donne l’impression de ne pas avancer “fonctionnellement”. L’arrivée des LLM a donc créé un espoir légitime :</p>
<blockquote><p>
    <strong>générer des tests plus vite</strong><br />
    <strong>augmenter la couverture</strong><br />
    <strong>sécuriser le code existant</strong>
</p></blockquote>
<p>En pratique, l’IA est très efficace… mais uniquement dans certains contextes bien précis.</p>
<h2>Ce que l’IA sait très bien faire côté tests</h2>
<p>Les LLM sont particulièrement bons pour générer des tests quand le périmètre est clair et bien délimité. Ce qui marche réellement bien :</p>
<blockquote><p>
    <strong>tests unitaires sur fonctions pures</strong><br />
    <strong>tests de validation de règles simples</strong><br />
    <strong>tests de non-régression basiques</strong><br />
    <strong>scaffolding de suites de tests</strong>
</p></blockquote>
<p>Dans ces cas-là, l’IA fait gagner un temps considérable sans dégrader la qualité globale.</p>
<h2>Ce que l’IA fait mal (ou dangereusement mal)</h2>
<p>Là où les choses se compliquent, c’est quand le contexte métier devient riche ou que les effets de bord sont nombreux. Les échecs classiques incluent :</p>
<blockquote><p>
    <strong>tests qui testent l’implémentation, pas le comportement</strong><br />
    <strong>assertions trop faibles ou inutiles</strong><br />
    <strong>tests qui passent même quand le code est faux</strong><br />
    <strong>scénarios irréalistes</strong>
</p></blockquote>
<p>Le pire cas ? Une couverture qui augmente, mais une confiance qui diminue.</p>
<h2>Pourquoi l’IA génère de “mauvais” tests</h2>
<p>Un LLM ne connaît pas l’intention métier. Il infère à partir du code et de patterns génériques. Résultat : il teste ce qui est visible, ignore les invariants implicites et ne sait pas distinguer le critique du secondaire. Sans guidance humaine, l’IA teste souvent “ce qui est facile à tester”, pas ce qui est important.</p>
<h2>Règle n°1 : l’IA écrit les tests, l’humain définit la stratégie</h2>
<p>La stratégie de test ne doit jamais être déléguée à l’IA. En équipe mature : l’humain définit <strong>quoi</strong> tester, et l’IA propose <strong>comment</strong> tester. Tant que cette frontière est claire, l’IA est un excellent assistant.</p>
<h2>Règle n°2 : toujours relire un test comme du code de production</h2>
<p>Un test généré par l’IA vit aussi longtemps que le code qu’il protège. En code review, un test doit répondre à trois questions : Que garantit-il réellement ? Peut-il échouer pour une bonne raison ? Me protégera-t-il d’une régression réelle ? Si la réponse est floue, le test doit être réécrit ou supprimé.</p>
<h2>Règle n°3 : méfiez-vous des métriques de couverture</h2>
<p>Augmenter la couverture de test est séduisant, mais ce n'est pas un objectif en soi. Avec l’IA, on peut facilement atteindre de hauts pourcentages sans réelle protection. Une bonne couverture protège des scénarios métier critiques et bloque les régressions dangereuses.</p>
<h2>Règle n°4 : tester le comportement, pas l’implémentation</h2>
<p>Les LLM ont tendance à tester les structures internes et les détails techniques. En production, ces tests cassent au moindre refactor, même si le comportement n'a pas changé. Un bon test doit être recentré sur les entrées, les sorties et les invariants métier.</p>
<h2>Règle n°5 : renforcer l’existant, pas masquer l’absence de tests</h2>
<p>Générer des tests avec l’IA sur un code non testable ne résout pas le problème, cela le dissimule. L’IA est efficace pour compléter une suite existante ou renforcer des zones critiques, mais elle ne sauvera pas une architecture déjà bancale.</p>
<h2>Comment valider des tests générés par l’IA</h2>
<p>Un test généré par IA est valide s'il échoue quand on casse volontairement le code, s'il exprime une règle métier compréhensible et s'il reste stable lors d’un refactor. Le meilleur test reste simple : casser le comportement et vérifier que le test tombe.</p>
<h2>Conclusion</h2>
<p>L’IA est un excellent accélérateur, mais elle ne remplace ni la réflexion, ni la compréhension métier. Bien utilisée, elle renforce la fiabilité ; mal utilisée, elle donne une illusion de sécurité. En tant que CTO, le vrai enjeu n’est pas de générer plus de tests, mais de générer les <strong>bons</strong> tests.</p>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/generer-des-tests-avec-lia-ce-qui-marche-ce-qui-casse-et-comment-valider/">Générer des tests avec l’IA : ce qui marche, ce qui casse, et comment valider</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/generer-des-tests-avec-lia-ce-qui-marche-ce-qui-casse-et-comment-valider/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RAG en production : 7 garde-fous anti-hallucinations côté dev</title>
		<link>https://www.winzana.com/rag-en-production-7-garde-fous-anti-hallucinations-cote-dev/</link>
					<comments>https://www.winzana.com/rag-en-production-7-garde-fous-anti-hallucinations-cote-dev/#respond</comments>
		
		<dc:creator><![CDATA[Vincent Journel]]></dc:creator>
		<pubDate>Fri, 16 Jan 2026 18:30:00 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Backend]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241615</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_6 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_6 et_pb_row et_block_row"><div class="et_pb_column_6 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_6 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><h2>IA &amp; SaaS / <strong>RAG en production</strong></h2>
<p><strong>Le RAG est une excellente réponse aux hallucinations des LLM. Mais mal implémenté, il en crée de nouvelles.</strong></p>
<h2>Avant de parler garde-fous : c’est quoi exactement un RAG ?</h2>
<p>RAG signifie <strong>Retrieval Augmented Generation</strong>. L’idée est simple : au lieu de laisser un LLM répondre uniquement avec ce qu’il “sait”, on lui fournit des <strong>données externes pertinentes</strong> au moment de la requête.</p>
<p>Concrètement, un RAG repose sur trois briques :</p>
<ul>
<li><strong>Une source de vérité :</strong> documents, base de données, base de connaissances.</li>
<li><strong>Un moteur de recherche sémantique :</strong> embeddings, vector store.</li>
<li><strong>Un LLM :</strong> qui génère la réponse à partir du contexte fourni.</li>
</ul>
<p>Le LLM ne “devine” plus : il répond à partir d’un contexte contrôlé. En théorie, cela réduit les hallucinations ; en pratique, seulement si l’architecture est solide.</p>
<h2>Pourquoi les hallucinations existent encore avec un RAG</h2>
<p>Beaucoup d’équipes découvrent le RAG en production et voient encore des réponses fausses. Les causes sont récurrentes :</p>
<blockquote><p>
    <strong>contexte incomplet ou bruité</strong><br />
    <strong>documents mal découpés (chunking)</strong><br />
    <strong>absence de règles côté génération</strong><br />
    <strong>confiance aveugle dans la réponse du LLM</strong>
</p></blockquote>
<p>Le RAG ne supprime pas les hallucinations par magie : il déplace le problème vers l’architecture et le pipeline de données.</p>
<h2>Garde-fou n°1 : une source de vérité strictement contrôlée</h2>
<p>Un RAG ne doit jamais indexer n’importe quoi. Les documents doivent être validés fonctionnellement, à jour et traçables (version, origine, date). Si la donnée source est mauvaise, le LLM sera mauvais. Le RAG ne corrige pas une base défaillante.</p>
<h2>Garde-fou n°2 : découper les documents intelligemment</h2>
<p>Un "chunk" (morceau de texte) trop gros dilue l’information, un trop petit fait perdre le contexte. Les bonnes pratiques incluent un découpage logique (par sections ou paragraphes), un "overlap" (recouvrement) contrôlé et l'usage systématique de métadonnées. Le découpage est un choix d’architecture stratégique.</p>
<h2>Garde-fou n°3 : limiter explicitement le champ de réponse du LLM</h2>
<p>Par défaut, un LLM essaiera toujours de répondre, même s'il ne sait pas. En production, il faut lui donner des règles strictes :</p>
<blockquote><p>
    <strong>“Répond uniquement à partir du contexte fourni”</strong><br />
    <strong>“Si l’information n’est pas présente, dis-le explicitement”</strong>
</p></blockquote>
<p>Forcer l’aveu d’ignorance est l’un des meilleurs anti-hallucinations possibles.</p>
<h2>Garde-fou n°4 : tracer systématiquement les sources utilisées</h2>
<p>Une réponse sans source est un risque. Un RAG doit permettre de savoir quels documents ont été utilisés et quels passages ont influencé la réponse. Sans cette traçabilité, impossible de corriger une erreur ou d'expliquer une réponse à un utilisateur.</p>
<h2>Garde-fou n°5 : mesurer la qualité, pas seulement la performance</h2>
<p>Beaucoup d’équipes monitorent la latence ou le coût, mais oublient de mesurer le taux de réponses hors contexte ou le taux de “je ne sais pas”. Sans métriques de qualité, les hallucinations passent inaperçues.</p>
<h2>Garde-fou n°6 : versionner le pipeline RAG</h2>
<p>Un RAG évolue sans cesse (nouveaux documents, prompts, modèles). Sans versioning, les régressions sont invisibles et les comparaisons impossibles. Le pipeline doit être versionné comme n’importe quel composant critique.</p>
<h2>Garde-fou n°7 : prévoir un mode dégradé (et l’assumer)</h2>
<p>Le RAG ne doit jamais être un point de défaillance unique. Il faut prévoir des réponses par défaut ou des "fallbacks" sans IA. Un RAG qui se tait vaut toujours mieux qu’un RAG qui invente.</p>
<h2>Conclusion</h2>
<p>Le RAG est un outil puissant, mais ce n’est pas une solution magique. En production, les hallucinations sont rarement un problème de modèle ; elles sont presque toujours un problème d’architecture. Un RAG bien conçu ne promet pas l’omniscience, mais fournit des réponses fiables et traçables.</p>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/rag-en-production-7-garde-fous-anti-hallucinations-cote-dev/">RAG en production : 7 garde-fous anti-hallucinations côté dev</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/rag-en-production-7-garde-fous-anti-hallucinations-cote-dev/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Architecture SaaS : mono-tenant vs multi-tenant (choisir sans regret)</title>
		<link>https://www.winzana.com/architecture-saas-mono-tenant-vs-multi-tenant-choisir-sans-regret/</link>
					<comments>https://www.winzana.com/architecture-saas-mono-tenant-vs-multi-tenant-choisir-sans-regret/#respond</comments>
		
		<dc:creator><![CDATA[Vincent Journel]]></dc:creator>
		<pubDate>Tue, 13 Jan 2026 17:30:00 +0000</pubDate>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Backend]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241610</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_8 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_8 et_pb_row et_block_row"><div class="et_pb_column_8 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_8 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><h2>Architecture SaaS / <strong>Mono-tenant vs Multi-tenant</strong></h2>
<p><strong>Mono-tenant ou multi-tenant n’est pas un choix technique anodin. C’est une décision structurante qui conditionne ton produit, ton run et ta capacité à scaler.</strong></p>
<h2>Un faux débat… jusqu’au jour où il devient critique</h2>
<p>Dans beaucoup de projets SaaS, la question mono-tenant vs multi-tenant est repoussée avec une phrase magique : <strong>“On verra plus tard, pour l’instant on fait simple.”</strong></p>
<p>Le problème, c’est que “plus tard” arrive toujours plus vite que prévu. Et quand le produit commence à marcher, revenir sur ce choix devient extrêmement coûteux. Ce n’est pas un débat théorique. C’est une décision d’architecture qui impacte la sécurité, la performance, les coûts, l’exploitation et même le business model.</p>
<h2>Mono-tenant : simplicité apparente, complexité déplacée</h2>
<p>En mono-tenant, chaque client dispose de son environnement : base de données, services, parfois même infrastructure dédiée. Les avantages sont réels :</p>
<blockquote><p>
    <strong>isolation forte des données</strong><br />
    <strong>sécurité plus simple à raisonner</strong><br />
    <strong>personnalisation client facilitée</strong>
</p></blockquote>
<p>Mais la contrepartie arrive rapidement sous forme de coûts d’infrastructure élevés, d’opérations complexes à grande échelle et de déploiements démultipliés. En pratique, le mono-tenant déplace la complexité de l’application vers l’exploitation.</p>
<h2>Multi-tenant : efficacité maximale, discipline obligatoire</h2>
<p>En multi-tenant, plusieurs clients partagent la même application et souvent la même base de données, avec une isolation logique. Les bénéfices sont clairs : mutualisation des coûts, scalabilité naturelle et déploiements centralisés.</p>
<p>Mais ce modèle exige une vraie rigueur architecturale :</p>
<blockquote><p>
    <strong>gestion stricte des accès aux données</strong><br />
    <strong>modèle de données pensé pour l’isolation</strong><br />
    <strong>tests systématiques des frontières de tenant</strong>
</p></blockquote>
<p>Le multi-tenant pardonne très peu les approximations.</p>
<h2>La vraie question : isolation logique ou isolation physique ?</h2>
<p>La vraie question n’est pas mono ou multi, mais <strong>comment et où on isole</strong>. Quelques options courantes pour la base de données :</p>
<ul>
<li><strong>Une base par tenant :</strong> isolation physique forte.</li>
<li><strong>Un schéma par tenant :</strong> compromis entre isolation et mutualisation.</li>
<li><strong>Une table partagée avec tenant_id :</strong> isolation logique pure, efficacité maximale.</li>
</ul>
<p>Chaque approche a des impacts directs sur la sécurité, les performances, les migrations et le run.</p>
<h2>Erreur classique : vouloir être multi-tenant “plus tard”</h2>
<p>Démarrer en mono-tenant en se disant qu’on migrera ensuite est l’une des erreurs les plus fréquentes. Le multi-tenant impacte profondément le modèle de données, les APIs, la sécurité et les tests. Sans anticipation minimale, la migration devient une refonte déguisée souvent très sous-estimée.</p>
<h2>Quand le mono-tenant est le bon choix</h2>
<p>C’est un choix adapté dans certains contextes précis :</p>
<blockquote><p>
    <strong>clients grands comptes avec exigences fortes</strong><br />
    <strong>contraintes réglementaires élevées</strong><br />
    <strong>volumétrie très hétérogène ou personnalisations lourdes</strong>
</p></blockquote>
<p>Il faut alors assumer un modèle économique plus proche d’un produit industriel que d’une plateforme mutualisée.</p>
<h2>Quand le multi-tenant est presque incontournable</h2>
<p>Le multi-tenant s'impose lorsque le volume de clients est élevé, le pricing standardisé et que la scalabilité est un objectif clé de croissance. Ne pas y penser dès le départ revient souvent à freiner son propre développement.</p>
<h2>Checklist CTO pour choisir sans regret</h2>
<p>Avant de trancher, voici les questions à poser clairement :</p>
<ul>
<li>Quel niveau d’isolation est réellement requis par mon marché ?</li>
<li>Quelle est l'hétérogénéité d'usage entre mes clients ?</li>
<li>Quel est mon modèle de coût d'infrastructure cible ?</li>
<li>Quel niveau d’automatisation du "run" est prévu ?</li>
</ul>
<h2>Conclusion</h2>
<p>Mono-tenant ou multi-tenant n’est pas une question de mode, mais de cohérence. Un bon choix aujourd’hui évite une refonte demain. Si ton SaaS commence à montrer des signes de tension, une revue d’architecture maintenant coûte toujours moins qu’une migration forcée plus tard.</p>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/architecture-saas-mono-tenant-vs-multi-tenant-choisir-sans-regret/">Architecture SaaS : mono-tenant vs multi-tenant (choisir sans regret)</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/architecture-saas-mono-tenant-vs-multi-tenant-choisir-sans-regret/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pourquoi envisager le low-code/no-code pour votre business ?</title>
		<link>https://www.winzana.com/pourquoi-envisager-le-low-code-no-code-pour-votre-business/</link>
					<comments>https://www.winzana.com/pourquoi-envisager-le-low-code-no-code-pour-votre-business/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 13:46:17 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Cybersécurité]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Frontend]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241382</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_10 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_10 et_pb_row et_block_row"><div class="et_pb_column_10 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_10 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><div>
<div>
<div>
<p><span>Tendances en forte croissance, le low-code et no-code s’imposent aujourd’hui comme une des solutions <strong>accessibles</strong> permettant à tout le monde de créer en quelques clics un site internet ou une application mobile.</span><span><br /></span><span><br /></span><span>Peu-importe votre niveau de compétence, que vous soyez un <strong>freelance</strong>, un <strong>particulier</strong> ou une <strong>entreprise</strong>, vous serez à même de créer et de mettre en forme vos idées par ce biais.</span></p>
<p><span>Chez Winzana nous nous efforçons de vous livrer le meilleur site possible, et grâce au low-code et no-code, vous aurez beaucoup plus de facilités à l’entretenir et à le faire <strong>grandir</strong>, même sans connaissances !</span><span><br /></span></p>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h3><strong> – Le low-code représente depuis fin 2021, 75% des nouvelles applications – </strong></h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h2><strong>Low-code, No-code … Qu’est-ce que c’est ? </strong></h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h3><strong>Définition du low-code.</strong></h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p><span>Le </span><strong>low-code</strong><span> est une technologie permettant de créer des applications et sites web nécessitant </span><strong>le moins de programmation possible ou une programmation simplifiée</strong><span>, en passant par des outils accessibles à tous grâce à leur interface graphique simple.</span><span><br /></span><span><br /></span><span>Contrairement au no-code, il est nécessaire d’avoir des bases en développement de sites web, mais cela ne demande pas d’avoir les connaissances d’un programmeur confirmé. </span></p>
<p><span>Finalement, comme son nom l’indique,</span><strong><span> </span>le low-code requiert un peu de code</strong><span>, mais sans demander des compétences et un niveau poussé pour parvenir à un résultat utile et intéressant. </span></p>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h3><strong>Définition du No-Code.</strong></h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p><span>Le </span><strong>no-code<span> </span></strong><span>est semblable à son “presque homologue”,  le low-code.</span><span><br /></span><span>À quelques différences près : le développement no-code ne nécessite <strong>aucune ligne de code</strong> pour créer une application web ou mobile. </span></p>
<p><span>Les outils fonctionnent avec un système de “ <strong>Glisser-Déposer</strong> », là où en low-code, il est possible de travailler sur des boucles à l’aide d’un tableau excel, gérer la base de données ou encore des API… </span></p>
<p><span>Le no-code s’adresse donc à un public qui n’a<strong> aucune connaissance</strong> en développement et en programmation mais voulant tout de même créer une application ou un site web dans le cadre de leur projet.</span></p>
<p><span>D’une façon un peu grossière, le no-code permet de rendre accessible et <strong>autonome</strong> des personnes qui n’auraient sans doute pas eu les compétences ni les outils nécessaires pour développer leur projet web.</span></p>
</div>
</div>
<div><span> </span></div>
<div>
<div>
<p><em>Création d’application par<span> </span><strong>« Glisser-Déposer »</strong>, ici avec l’outil no-code<span> </span><strong>Adalo</strong></em></p>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h2><strong>Le Low-Code, No-Code en chiffres.</strong></h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p><span>Selon le cabinet </span><a href="https://venturebeat.com/2021/07/24/low-code-a-promising-trend-or-a-pandoras-box/"><span>Forrester</span></a><span>, qui est l’un des cabinets d’études et de conseils les plus influents au monde, le « Low-code » représente, depuis la<strong> fin 2021,  75% des nouvelles applications</strong>.</span><span><br /></span><span><br /></span><span>Il y a donc un <strong>énorme enjeu</strong> pour les grosses entreprises comme Google et Microsoft qui proposent toutes une offre de développement no-code/low-code pour pouvoir toucher un public toujours plus large.</span><span><br /></span></p>
<p><span>D’après </span><a href="https://www.businesswire.com/news/home/20191029005144/en/IDC-FutureScape-Outlines-the-Impact-Digital-Supremacy-Will-Have-on-Enterprise-Transformation-and-the-IT-Industry"><span>un article de Business Wire</span></a><span>, <strong>durant ces 5 prochaines années, 500 millions d’applications low code</strong> devraient être créées, c’est plus que celles des 40 dernières années.</span><span><br /></span><span><br /></span><span>Ce chiffre est assez révélateur du comportement d’adoption en masse des logiciels no-code et low-code auprès des professionnels qui, aujourd’hui, se retrouvent être<strong> moins dépendants</strong> à l’égard des développeurs.</span><span><br /></span><span><br /></span><span>En effet, le no-code et le low-code permettent de<strong> lever des barrières</strong>, des freins qui rendaient l’accès à certaines pratiques beaucoup plus compliqué qu’il ne l’est jusqu’alors. </span></p>
<p><span>On peut aisément parler de révolution technologique.<strong> Ces solutions viennent bousculer l’écosystème de la tech’ aujourd’hui</strong>, car elles donnent accès à des outils techniques essentiels sans nécessiter l’embauche de développeurs ou la création d’une équipe pour le développement de projets.</span></p>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h2><strong>À qui s’adresse le low-code, no-code ? </strong></h2>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p><span>Si vous êtes ici, c’est que forcément vous avez entendu parler de ces deux technologies que ce soit dans un cadre professionnel ou à titre personnel.</span><span><br /></span><span><br /></span><span>Était-ce par curiosité ? Ou cette recherche témoigne-t-elle d’une réelle envie d’essayer ces outils … Quoiqu’il en soit, il est nécessaire de se demander <strong>pourquoi passer par ces technologies, quels sont leurs avantages ? </strong></span></p>
<p>&nbsp;</p>
<h3><strong>Ceux qui veulent expérimenter.</strong></h3>
<p>&nbsp;</p>
<p><span>Premièrement le no-code/low-code peut vous être utile pour <strong>tester vos projets</strong>, lancer vos premières plateformes. En effet, vous pouvez facilement tester et lancer votre idée, en mettant moins de temps et d’argent que si vous faisiez appel à une équipe, ou en mobilisant vos employés potentiellement déjà sur d’autres projets. </span></p>
<p>&nbsp;</p>
<h3><strong>Ceux qui visent l’indépendance…</strong></h3>
<p>&nbsp;</p>
<p><span>Si vous ne disposez des compétences nécessaires pour réaliser ce dont vous avez envie ou que vous soyez<strong> une entreprise manquant d’effectif d’une expertise liée à vos envies</strong>…  Une application ou un site no-code vous permettra de mettre à jour régulièrement vos contenus, sans passer par une tierce personne, lorsque votre site est en place, vous n’avez plus qu’à vous <strong>consacrer sur votre stratégie de contenu</strong>, vos produits…</span></p>
<p>&nbsp;</p>
<h3><strong>…jusqu’à une certaine limite. </strong></h3>
<p>&nbsp;</p>
<p><span>Cependant, selon l’ampleur et la complexité de votre projet, vous vous rendrez vite compte que ce type d’applications est soumis à certaines limites.</span><span><br /></span><span><br /></span><span>Bien-sûr, ces solutions sont idéales dans le cadre de <strong>projets “simples”</strong>. Dès lors que l’on souhaite rajouter des fonctionnalités complexes, sur-mesure … On se rend compte des limites de l’outil développé pour répondre à des besoins standards, génériques.</span><span><br /></span><span><br /></span><span>Et de la nécessité de faire appel à des développeurs que ce soit en termes de conseils, de<strong> faisabilité et d’exécution et de mise en production.</strong></span></p>
<p><span><br /></span><span>Aujourd’hui, là où les entreprises relatent d’énormes difficultés à embaucher des développeurs, chez Winzana<strong> nos équipes de développeurs vous accompagnent</strong> afin de mettre en œuvre vos projets. </span></p>
<p><span><br /></span><span>Si c’est vraiment du low-code ou du no-code que vous souhaitez, aucun problème. Nos équipes vous proposerons les meilleures solutions pour mener votre projet à bien et feront en sorte<strong> qu’elles vous soient simples à administrer. </strong></span></p>
<p><span><strong><span class="hs-cta-wrapper" id="hs-cta-wrapper-562595bc-42f2-4e8d-a157-fdd13930333a"><span class="hs-cta-node hs-cta-562595bc-42f2-4e8d-a157-fdd13930333a" id="hs-cta-562595bc-42f2-4e8d-a157-fdd13930333a" data-hs-drop="true"><a id="cta_button_6939182_3ca0f709-c75a-4c51-96f7-b0570d55c270" class="cta_button btn" href="https://cta-service-cms2.hubspot.com/ctas/v2/public/cs/c/?cta_guid=3ca0f709-c75a-4c51-96f7-b0570d55c270&amp;signature=AAH58kH0f-vx2gOlsZnGVD3ucq-F9E52aQ&amp;utm_referrer=https%3A%2F%2Fwww.winzana.com%2Ffr%2Fretd.html&amp;portal_id=6939182&amp;pageId=91721012311&amp;placement_guid=562595bc-42f2-4e8d-a157-fdd13930333a&amp;click=060865ad-ea3d-40df-9f1a-1077f1bc8059&amp;redirect_url=APefjpGpp_FPSUjac2A6XZnx3bI8snnDYaA3oyluVDUQFYbv50ZPyGWHCFgzezxOYq0DMBsFE_Hd_7gVbCou4e_87Yhh-IfcporvmEolfdX80eqNmYCUR_LyNjlVvDtqMwe7j4wTIKc2-n2INVDRtvMkSXEAnhx0IdwAclETLX12pCk6X0yrWRqfTvbiIZbWXgfa1wPrwWP7pHwGHBH-0yhLBboeklj-t40MbcBxgoeGDKy2bwahryEBLNQat1CXmtTFfAnBxueVrzJO8DOgVMKLLl4rs4RHig&amp;hsutk=f52c1e3b2d5a42fea83f14b92096aafa&amp;canon=https%3A%2F%2Fwww.winzana.com%2Ffr%2Fretd%2Fpourquoi-envisager-le-low-code%2Fno-code-pour-votre-business.html&amp;ts=1760449507821&amp;__hstc=205079375.f52c1e3b2d5a42fea83f14b92096aafa.1744642037895.1760433170422.1760447422120.51&amp;__hssc=205079375.14.1760447422120&amp;__hsfp=2924012137&amp;contentType=blog-post" cta_dest_link="http://6939182.hs-sites.com/fr/" title="Je veux développer mon projet !">Je veux développer mon projet !</a></span></span></strong></span></p>
<p>&nbsp;</p>
</div>
</div>
<div><span>Vous n’aurez plus qu’à vous soucier du contenu et du design. Sur le long terme, disposer d’une application sur-mesure pour votre entreprise, vous fera</span><strong> gagner un temps considérable</strong><span> </span><span>, et permettra d’avoir une réalisation répondant précisément à votre besoin et à votre problématique.</span></div>
<div>
<p>&nbsp;</p>
<p><span>Une solution No-Code offre<strong> une liberté opérationnelle</strong> séduisant beaucoup d’entreprises de par la rapidité et la liberté d’exécution. Une fois que vous aurez la vôtre, il sera difficile de vous en passer.</span></p>
<p>&nbsp;</p>
</div>
<div>
<div>
<h2><strong>Les avantages de ces techniques</strong></h2>
<p>&nbsp;</p>
<p>En résumé les principaux avantages sont :</p>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<ul>
<li><span>GAIN DE TEMPS</span></li>
<li><span>GAIN D’ARGENT</span><span></span></li>
<li><span>FACILITÉ DE MISE EN PLACE</span></li>
<li><span>FACILITÉ D’APPRENTISSAGE</span></li>
<li><span>SOLUTION À LA PÉNURIE DE DÉVELOPPEURS</span></li>
</ul>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<h3> </h3>
<h3><strong>Des exemples de plateformes</strong></h3>
<p>&nbsp;</p>
<p><span>Une des plateformes les plus connues on peut citer <strong>WordPress</strong>, le leader des CMS (Content Management System), utilisé par <strong>34% des sites web en 2020.</strong> WordPress, c’est du low-code, il est possible de créer son site à l’aide de template, de blocs, et de le personnaliser en modifiant son code, en gérant la base de données. Cependant des extensions sur WordPress comme l’éditeur de page Divi, proposent une solution no-code, où vous pouvez mettre en forme votre site en glissant et déposant des blocs et en modifiant leur design, leur position…  </span></p>
<p><span>Avec le même fonctionnement, il existe les entreprises</span><span> <strong>Wix</strong> et <strong>Shopify</strong>.</span></p>
</div>
</div>
</div>
<div>
<p><em>L’ajout de blocs avec l’extension Divi sur WordPress</em></p>
</div>
</div>
<div>
<div>
<div>
<p><em>Personnalisation des thèmes par du CSS</em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h2><strong>L’expertise Winzana </strong></h2>
<p>&nbsp;</p>
<p><span>Comme nous vous l’expliquions, Winzana est adepte du low-code/no-code. Aujourd’hui nous sommes intervenus sur plusieurs projets à l’aide de ces technologies, en utilisant notamment <strong>les outils WordPress, HubSpot ou encore Firebase.</strong></span></p>
</div>
</div>
<div>
<div>
<p><strong>Ces solutions vous intéressent, vous avez un projet en tête ? N’hésitez pas à faire appel à nous, nous mettrons nos développeurs à votre service pour répondre au mieux à votre demande.</strong></p>
</div>
</div>
</div>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/pourquoi-envisager-le-low-code-no-code-pour-votre-business/">Pourquoi envisager le low-code/no-code pour votre business ?</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/pourquoi-envisager-le-low-code-no-code-pour-votre-business/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Faut-il choisir une application mobile Native ou une PWA ?</title>
		<link>https://www.winzana.com/faut-il-choisir-une-application-mobile-native-ou-une-pwa/</link>
					<comments>https://www.winzana.com/faut-il-choisir-une-application-mobile-native-ou-une-pwa/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 13:40:34 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Mobile]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241367</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_12 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_12 et_pb_row et_block_row"><div class="et_pb_column_12 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_12 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><div>
<div>
<div>
<div>
<p>Il n’est jamais évident de s’y retrouver dans tous les choix technologiques possibles pour développer votre solution mobile mais, une chose est sûre, c’est que vous voulez que votre application mobile soit présente dans la liste de celles utilisées par vos clients !</p>
</div>
</div>
</div>
</div>
<div>
<h2> </h2>
<h2>Votre application mobile disponible pour vos clients</h2>
<h2> </h2>
<p>Nous allons voir ici quelles sont les solutions qui s’offrent à vous pour que votre application mobile soit disponible et accessible pour vos clients:</p>
<p>&nbsp;</p>
<ul>
<li>Faire une application mobile Native</li>
<li>Faire un application mobile Hybride</li>
<li>Faire une application PWA (Progressive Web App)</li>
<li><span>Nous voilà bien avancés. Mais qu’est-ce qu’on va faire avec tout ça ?</span></li>
</ul>
<p><span>L’important est surtout de savoir ce que vous, vous voulez faire:<br /></span></p>
</div>
<div>
<ul>
<li>Quel est votre business model ?</li>
<li>Quelles fonctionnalités souhaitez-vous mettre à disposition de vos clients ?</li>
<li>Quelles sont les fonctionnalités disponibles sur une application mobile ?</li>
<li>Souhaitez-vous pouvoir vendre vos produits depuis un smartphone ?</li>
<li>Souhaitez-vous pouvoir communiquer rapidement et efficacement avec vos clients ?</li>
<li>Nombreuses sont les questions à se poser et on vous propose de se les poser ensemble !</li>
</ul>
</div>
<div>
<div>
<div>
<div>
<h2>L’application mobile</h2>
</div>
</div>
<div>
<div>
<h3>Une application mobile, qu’est-ce que c’est ?</h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>C’est un programme compilé et installable sur un<span> </span><strong>smartphone</strong>. Qu’est-ce que ça veut dire ? Que le programme qui est développé n’est pas spécialement dynamique (c’est-à-dire connecté à une source de données distante permettant d’afficher de la donnée de façon dynamique).</p>
<p>Si l’on souhaite mettre à jour l’<a href="https://www.winzana.com/mobile-apps/index.html" target="_blank" rel="noopener noreferrer"><strong>application mobile</strong></a>, il faudra soumettre une nouvelle version de l’application à l’<strong>App Store</strong><span> </span>d’Apple et au<span> </span><strong>Play Store</strong><span> </span>de Google. Si l’on souhaite proposer l’inscription ou afficher de la donnée dynamique, alors il faudrait également développer une<span> </span><strong>API</strong><span> </span>du côté du serveur (on y reviendra prochainement).</p>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h3>Que peut-on faire avec une application mobile ?</h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Le premier<span> </span><strong>avantage</strong><span> </span>qu’il y a, et qui est aussi un inconvénient, c’est que votre<span> </span><strong>application</strong><span> </span>sera disponible sur l’<strong>App Store</strong><span> </span>et le<span> </span><strong>Play Store</strong>. Pourquoi serait-ce un inconvénient nous direz-vous ? Eh bien parce que vous êtes tributaires du bon vouloir de ces stores. En effet, si<span> </span><strong>Apple</strong><span> </span>ou<span> </span><strong>Google</strong><span> </span>considère que votre application n’est pas conforme à leurs conditions ou que le smartphone de vos clients n’est pas raccord aux<span> </span><strong>accords commerciaux</strong><span> </span>avec leur société<span> </span><em>(comme<span> </span><a href="https://www.rtl.be/info/magazine/hi-tech/on-est-en-2020-et-huawei-est-toujours-prive-de-google-que-faut-il-attendre-de-cette-annee-de-transition--1190882.aspx" target="_blank" rel="noopener noreferrer">Huawei</a>, par exemple)</em>, vous pouvez tout simplement mettre votre application à la poubelle<span> </span><em>(et ce n’est pas le but)</em>. Mais avoir son application sur les stores reste quand même un gage de<span> </span><strong>confiance</strong><span> </span>et de<span> </span><strong>qualité</strong><span> </span>auprès de vos utilisateurs, on ne peut pas le nier.</p>
</div>
</div>
<div>
<div>
<p>Ensuite, l’idée est de savoir quelles sont les<strong><span> </span>fonctionnalités</strong><span> </span>et<span> </span><strong>possibilités</strong><span> </span>que vous apporte une<span> </span><strong>application mobile native</strong>:</p>
<p>&nbsp;</p>
<ul>
<li>Accès à la géolocalisation en tâche de fond</li>
<li>Accès au Geofencing<em><span> </span>(géorepérage)</em></li>
<li>Accès aux tâches de fond<span> </span><em>(pour les téléchargements de fichiers par exemple)</em></li>
<li>Accès aux fonctionnalités de lecture en tâche de fond<span> </span><em>(comme Spotify pour la musique par exemple)</em></li>
<li>Accès aux fonctionnalités de HealthKit<em><span> </span>(pour avoir le rythme cardiaque par exemple)</em></li>
<li>Accès au Wallet<em><span> </span>(portefeuille virtuel d’Apple et de Google)</em></li>
<li>Accès au Bluetooth<span> </span><em>(pour la connexion d’objets connectés)</em></li>
<li>Accès au Game Center</li>
<li>Accès au NFC</li>
<li>Accès au stockage de données local<span> </span><em>(de façon cryptée ou non pour être compatible avec les contraintes de gestion des données de santé)</em></li>
</ul>
<p>Et encore de nombreuses fonctionnalités liées au smartphone de vos utilisateurs !</p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>
<h2>La Progressive Web App</h2>
</div>
</div>
<div>
<div>
<h3>Une application PWA, qu’est-ce que c’est ?</h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Une<span> </span><strong>PWA</strong>, qui est l’abréviation de<span> </span><a href="https://www.winzana.com/web-apps/index.html" target="_blank" rel="noopener noreferrer"><strong>Progressive Web App</strong></a><span> </span><em>(ou Application Web Progressive en français)</em><span> </span>est une application web qui consiste à afficher des pages Web ou un site Web. L’affichage permet d’avoir le même rendu graphique qu’une<span> </span><strong>application mobile native</strong>.</p>
<p>Ce type d’application permet de combiner les<span> </span><strong>fonctionnalités</strong><span> </span>disponibles sur la plupart des navigateurs web modernes avec le confort de l’expérience offerte par les<span> </span><strong>smartphones</strong>.</p>
<p>Une<span> </span><strong>PWA</strong><span> </span>se consulte comme un<span> </span><strong>site web responsive</strong><span> </span>classique. On y accède via une URL en HTTPS. Elle permet également d’avoir une icône d’application sur le smartphone d’un client sans être obligé de passer par le processus complexe de validation des stores<strong><span> </span>Apple</strong><span> </span>et<span> </span><strong>Google</strong>.</p>
<p>&nbsp;</p>
<h3>L’avantage d’une application PWA ? C’est plus rapide et simple à développer qu’une application mobile Native.</h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<h3>Que peut-on faire avec une application PWA ?</h3>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>La réponse est simple: on peut faire exactement la même chose qu’avec un<span> </span><strong>site web responsive</strong>.</p>
<p>Les fonctionnalités supplémentaires en comparaison à un site web sont par exemple:</p>
<p>&nbsp;</p>
<ul>
<li>La création d’un raccourci du site ou de la Webapp directement sur l’écran d’accueil du visiteur</li>
<li>Accéder à des fonctionnalités du téléphone telles que l’appareil photo, la géolocalisation ou encore le micro</li>
<li>Consulter du contenu en mode hors ligne</li>
<li>Permettre d’envoyer des notifications<span> </span><em>push</em><span> </span>comme pour une application mobile</li>
</ul>
</div>
</div>
</div>
</div>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/faut-il-choisir-une-application-mobile-native-ou-une-pwa/">Faut-il choisir une application mobile Native ou une PWA ?</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/faut-il-choisir-une-application-mobile-native-ou-une-pwa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installer API Platform sur un projet Symfony 3.4</title>
		<link>https://www.winzana.com/installer-api-platform-sur-un-projet-symfony-3-4/</link>
					<comments>https://www.winzana.com/installer-api-platform-sur-un-projet-symfony-3-4/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 13:29:32 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[API Platform]]></category>
		<category><![CDATA[Symfony]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241341</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_14 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_14 et_pb_row et_block_row"><div class="et_pb_column_14 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_14 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><div>
<div>
<div>
<div>
<p>L’idée de ce billet sur l’installation d’<strong>API Platform</strong><span> </span>sur un projet<span> </span><strong>Symfony 3.4</strong> m’est venue lors de la réalisation d’une conférence avec l’association<span> </span><a href="https://www.meetup.com/fr-FR/Ardech-Drom-Dev/" target="_blank" rel="noopener noreferrer" title="Ardèch’Drôm Dev">Ardèch’Drôm Dev</a><span> </span>sur ce même sujet.</p>
<p>La vidéo est disponible sur le lien suivant :<span> </span><a href="https://www.winzana.com/article/api-platform.html">Conférence API Platform</a></p>
<p>Tout est parti d’une idée simple: comment puis-je mettre en place une<span> </span><strong>API Rest</strong><span> </span>avancée sur une projet<span> </span><strong>Symfony 3.4</strong><span> </span>déjà réalisé ? Trois solutions sont alors disponibles :</p>
<ul>
<li>À la mano :<span> </span><em>Controller</em><span> </span>et<span> </span><em>JsonResponse</em></li>
<li>Avec<span> </span><strong>FOSRestBundle</strong><span> </span>(<a href="https://github.com/FriendsOfSymfony/FOSRestBundle">https://github.com/FriendsOfSymfony/FOSRestBundle</a>) &amp;<span> </span><strong>JMSSerializerBundle</strong><span> </span>(<a href="https://jmsyst.com/bundles/JMSSerializerBundle">https://jmsyst.com/bundles/JMSSerializerBundle</a>)</li>
<li>Avec<span> </span><strong>API Platform</strong><span> </span>(<a href="https://api-platform.com/">https://api-platform.com/</a>)</li>
</ul>
<ul>
<li>La première, à la mano, ce n’est même pas envisageable ! Trop longue, trop source d’erreur, mais surtout trop longue !</li>
<li>La seconde: déjà fait. Pas trop mal, assez simple à mettre en place, déjà connue et une très grosse communauté derrière.</li>
<li>La dernière solution, j’ai eu l’occasion de la découvrir lors d’un déplacement chez un client à Valence où j’y ai rencontré, par le plus grand des hasards, Kévin DUNGLAS. C’est de cette solution dont on va parler aujourd’hui.</li>
</ul>
<p>Étant donné que je suis un grand amateur de nouvelles solutions, je me suis laissé séduire et j’ai fini par mettre le nez dans la solution. Premier constat :<span> </span><em>“READ THE<span> </span><span>F*CKING</span><span> </span>MANUAL”</em>. Mais What ?! La doc est magnifique, un vrai régal pour les yeux (<a href="https://api-platform.com/docs/">https://api-platform.com/docs/</a>). Un moteur de recherche simple pour trouver tout ce dont on a besoin. Une version get started sur<span> </span><strong>Docker</strong>, super bien réalisée, avec une compatibilité<span> </span><strong>Kubernetes</strong>. Bref le décor parfait… Parfait oui, mais pour<span> </span><strong>Symfony 4</strong>. Ou un projet vierge.</p>
<p>&nbsp;</p>
<p><span>Impensable pour moi. Mon projet était déjà en place depuis bien longtemps. Une flemmingite aigüe commença à monter en moi. Mais bon, l’envie étant plus forte que tout… Et j’ai pris mon courage à deux mains !</span></p>
<p>&nbsp;</p>
<p><span>Je me suis mis en quête de mettre ça en place sur tous mes projets personnels et, tant qu’à faire, rédiger un guide d’installation d’</span><strong>Api Platform</strong><span> </span><span>sur ma stack actuel</span><span> </span><strong>Symfony 3.4</strong><span>. En avant Guingamp…</span></p>
<p>&nbsp;</p>
<p><span>Je plante le décor :</span></p>
<p>&nbsp;</p>
<p><span>Projet</span><span> </span><strong>e-commerce</strong><span> </span><span>from scratch maison</span></p>
</div>
</div>
</div>
</div>
<div>
<ul>
<li><em>Bundle</em><span> </span>en place :
<ul>
<li><strong>FOSUserBundle</strong></li>
<li><strong>ApydataGridBundle</strong></li>
<li><strong>StofDoctrineExtensionsBundle</strong></li>
<li><strong>NelmioSolariumBundle</strong></li>
<li>…</li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<p>Bref rien de transcendant, la stack habituel des familles.<br />Maintenant, comment je vais rajouter<span> </span><strong>API Platform</strong><span> </span>à tout ça ?</p>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span> composer require api </span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>AHHHH la bonne blague ! Je n’ai pas<span> </span><strong>Flex</strong><span> </span>sur mon projet… Mais alors comment faire ? Je ne vous cache pas que j’ai cherché quelques heures et fait un<span> </span><em>Diff</em><span> </span>entre un projet vierge de<span> </span><strong>Symfony 3.4</strong><span> </span>et<span> </span><strong>Symfony 4</strong>, je suis tombé sur la conclusion suivante :<br />Pour ce faire il faut :</p>
<ul>
<li>Avoir une version de<span> </span><strong>PHP 7.1</strong><span> </span>minimum</li>
<li>Installer
<ul>
<li><strong>Api-platform/Core</strong></li>
<li><strong>Dunglas/Action-Bundle</strong></li>
<li><strong>Nelmio/Cors-Bundle</strong></li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<p>Merci Composer !</p>
<p>Ensuite, modification du<span> </span><strong>AppKernel</strong>, puis toute la petite configuration qui va bien :</p>
<ul>
<li>Configuration globale</li>
</ul>
<p>&nbsp;</p>
<p>Pour expliquer, ce petit bout de configuration sur<span> </span><em>“sensio_framework_extra”</em><span> </span>n’est pas lié à<span> </span><strong>API Platform</strong>. Cette configuration permet d’injecter mes entités directement à mes<span> </span><em>controllers</em><span> </span>sans être obligé d’utiliser l’Annotation @ParamConverter, mais tout est expliqué<span> </span><a href="https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html">ici</a>.</p>
<ul>
<li>Ajout route/api</li>
</ul>
<p>&nbsp;</p>
<p>Cette configuration a plusieurs intérêts. Le premier c’est de pouvoir diffuser votre<span> </span><strong>API</strong><span> </span>sur l’<em>entrypoint</em><span> </span>/api mais cela permet également d’exposer, grâce à<span> </span><strong>API Platform</strong>, un client<span> </span><strong>WEB Swagger</strong><span> </span>(<a href="https://swagger.io/">https://swagger.io/</a>), permettant d’avoir une version documentée de votre<span> </span><strong>API</strong>, diffusable ou non 😉.</p>
<ul>
<li>Pour ce qui est de la configuration du fichier<span> </span><em>“app/config/api/api_platform.yml”</em>, je vous invite à consulter le lien suivant :<span> </span><a href="https://api-platform.com/docs/core/configuration">https://api-platform.com/docs/core/configuration</a>, qui explique très bien tout ça.</li>
</ul>
<p>&nbsp;</p>
<p>Et maintenant il n’y a plus qu’à !</p>
<p>Voilà ! On ne s’est pas froissé un muscle et tout est prêt pour développer mon API.</p>
<p>&nbsp;</p>
<p><span>Qu’est ce qu’il me reste à faire maintenant ? Si vous utilisez les annotations, la manip est très simple : il vous suffit d’ajouter l’annotation @ApiResource à la classe de votre entité.</span></p>
<p>&nbsp;</p>
<p><span>Mais ne soyons pas trop gourmands pour aujourd’hui. Nous verrons dans un prochain article comment implémenter</span><span> </span><strong>API Platform</strong><span>.</span></p>
</div>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/installer-api-platform-sur-un-projet-symfony-3-4/">Installer API Platform sur un projet Symfony 3.4</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/installer-api-platform-sur-un-projet-symfony-3-4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Comment transformer un higher order component en React Hook</title>
		<link>https://www.winzana.com/comment-transformer-un-higher-order-component-en-react-hook/</link>
					<comments>https://www.winzana.com/comment-transformer-un-higher-order-component-en-react-hook/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 13:27:51 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[React Hook]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241336</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_16 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_16 et_pb_row et_block_row"><div class="et_pb_column_16 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_text_16 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><div>
<div>
<div>
<div>
<p>Aujourd’hui, dans cet article, nous allons voir comment remplacer le<span> </span><em>pattern</em><span> </span><strong>Higher Order Component</strong><span> </span>par<span> </span><strong>React Hook</strong>. Au sein de cet article, vous trouverez les avantages et inconvénients de chacun de ces deux outils.</p>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Higher Order Component</h2>
<p>&nbsp;</p>
<p>Le<span> </span><strong>HOC</strong><span> </span>est un<span> </span><em>pattern</em><span> </span>permettant d’encapsuler un composant et d’en modifier le comportement sans toucher au composant encapsulé ou en injectant des propriétés calculées par le<span> </span><strong>HOC</strong>. En clair, le<span> </span><strong>HOC</strong><span> </span>est une fonction qui retourne un composant dont le comportement est modifié par celui-ci.</p>
<p>&nbsp;</p>
<p>Un exemple avec un<span> </span><strong>HOC</strong><span> </span>qui n’affiche le composant que si l’utilisateur a les droits nécessaires :</p>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>const withRole = (WrappedComponent, roleRequired) =&gt;{ return class extends React.Component { constructor(props){ super(props); this.state = { granted: false }; } componentDidMount() { isUserGranted(roleRequired).then(granted =&gt;; {</span><br /><span>this.setState({ granted });</span><br /><span>});</span><br /><span>}</span><br /><span>render(){</span><br /><span>const { granted } = this.state;</span><br /><span>return granted ? : null;</span><br /><span>}</span><br /><span>};</span><br /><span>};</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
</div>
<div>
<p><span>Pour l’utiliser il suffit de</span><span> </span><em>wrapper</em><span> </span><span>le composant :</span></p>
</div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>const GrantedView = withRole(AwesomeView, ‘&lt;role_required&gt;’);</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div>
<div>
<p>On identifie tout de suite le problème, si on veut définir plusieurs<span> </span><strong>HOC</strong><span> </span>on obtient :</p>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td> <span>withAuthentication(withRole(withUser(WrappedComponent)));</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
</div>
<div>
<div>
<p>Pas de soucis,<span> </span><em>compose</em><span> </span>à la rescousse :</p>
</div>
</div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>const UserComponent = compose(</span><br /><span>withAuthentication,</span><br /><span>withRole,</span><br /><span>withUser,</span><br /><span>);</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p><span>Mais en plus d’être verbeux, cela génère une hiérarchie telle que :</span></p>
</div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>&lt;withAuthentication&gt;</span><br /><span>&lt;withRole&gt;</span><br /><span>&lt;withUser&gt;</span><br /><span>&lt;UserComponent/&gt;</span><br /><span>&lt;/withUser&gt;</span><br /><span>&lt;/withRole&gt;</span><br /><span>&lt;/withAuthentication&gt;</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div>
<p>&nbsp;</p>
<p><span>Il y a un donc non seulement une complexité non négligeable pour un simple</span><span> </span><em>isGranted</em><span> </span><span>et cette complexité au niveau de la hiérarchie a un impact direct sur la performance. A noter qu’un</span><span> </span><strong>HOC</strong><span> </span><span>a parfaitement sa place pour un</span><span> </span><em>isAuthenticated</em><span> </span><span>par exemple dans un router. Mais dans notre cas on va simplifier notre</span><span> </span><strong>HOC</strong><span> </span><span>pour le rendre encore plus réutilisable avec des</span><span> </span><em>hooks</em><span>.</span></p>
</div>
</div>
<div>
<div>
<div>
<h2>React Hook</h2>
<p>&nbsp;</p>
<p>Les règles à respecter pour des<span> </span><em>hooks</em><span> </span>fonctionnels :</p>
<p><a href="https://reactjs.org/docs/hooks-rules.html">https://reactjs.org/docs/hooks-rules.html</a></p>
<p>Si une de ces règles n’est pas respectée, un comportement inattendu peut survenir dans l’application.</p>
<p>Comme pour le<span> </span><strong>Higher Order Component</strong>, le principe est de modifier/surcharger le comportement d’un composant, sans tomber dans le piège du<span> </span><em>high order component hell</em><span> </span>et du<span> </span><em>nesting hell</em>, sauf que cette fois c’est le composant lui même qui appelle le<span> </span><em>hook</em>, et c’est ce<span> </span><em>hook</em><span> </span>qui contiendra la logique.</p>
<p>Comme pour le<span> </span><strong>HOC</strong>,<span> </span><strong>React Hook</strong><span> </span>possède quelques inconvénients. Premièrement, l’appropriation des connaissances pour concevoir un<span> </span><em>Hook</em>. Les<span> </span><em>hooks</em><span> </span>sont maintenant bien assimilés par la communauté, mais si vous n’en avez encore jamais fait, écrire votre premier<span> </span><em>custom hook</em><span> </span>peut vous donner des boutons !<br />“Passer des classes à … ça ?!”<br />Le principal inconvénient des<span> </span><em>hooks</em>, c’est le couplage fort (composition) entre le composant qui l’utilise et le<span> </span><em>hook</em>. Regardons ça !</p>
</div>
</div>
<div> </div>
<div><span>Transformer un HOC en React Hook</span></div>
<div><span>On va donc créer un</span><span> </span><em>custom Hook</em><span>, qui va se charger de faire l’appel</span><span> </span><strong>API</strong><span> </span><em>isUserGranted</em><span>, et nous retourner la réponse. Ce</span><span> </span><em>hook</em><span> </span><span>impacte directement le cycle de vie du composant qu’il implémente :</span></div>
<div><span> </span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td>
<div><span>const withRole = ({ roleRequired }: Props) =&gt; {</span></div>
<div><span>const [isGranted, setGranted] = useState(false);</span></div>
<div><span>useEffect(() =&gt; {</span></div>
<div><span>isUserGranted(roleRequired).then(granted =&gt; {</span></div>
<div><span>setGranted(granted)</span></div>
<div><span>});</span></div>
<div><span>}, []);</span></div>
<div><span>return isGranted</span></div>
<div><span>};</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div><span>Je peux utiliser le</span><span> </span><em>hook</em><span> </span><span>directement :</span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td>
<div><span>const MyPage = (props) =&gt; {</span></div>
<div><span>const isGranted = withRole(« role »);</span></div>
<div><span>return ….</span></div>
<div><span>}</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div> </div>
<div><span>Ou encore l’utiliser pour faire un composant qui affichera ou pas son enfant en fonction de la résolution de la variable</span><span> </span><em>isGranted</em><span> </span><span>:</span></div>
<div><span> </span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>export const Granted = ({children, roleRequired}) =&gt; { const isGranted = withRole(roleRequired); return isGranted ? children : null; }</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div><span> </span></div>
<div><span>On a utilisé ici un</span><span> </span><em>hook react</em><span> </span><span>:</span><span> </span><em>useEffect</em><span>, qui est l’équivalent du</span><span> </span><em>componentDidMount</em><span>(). Le component</span><span> </span><em>MyPage</em><span>, sera de nouveau “rendu” lorsque la variable</span><span> </span><em>isGranted</em><span> </span><span>sera résolue par notre web-service. Le premier avantage, c’est la simplicité. C’est lisible, toute la complexité inutile a disparu. La hiérarchie est plate, pas de composant supérieur à l’horizon. Cependant il y a un inconvénient, que l’on a pas avec les</span><span> </span><strong>HOC</strong><span>, le couplage fort. La communauté</span><span> </span><strong>React</strong><span> </span><span>est bien au courant de ce défaut, maintenant nous utilisons les</span><span> </span><em>hooks</em><span> </span><span>de manière générale, ces</span><span> </span><em>hooks</em><span> </span><span>vont surement évoluer à l’avenir.</span></div>
<div><span> </span></div>
<div><span>Des bonnes raisons d’utiliser un</span><span> </span><strong>HOC</strong><span> </span><span>au lieu d’un</span><span> </span><em>Hook</em><span> </span><span>:</span></div>
<div><span> </span></div>
<div><span>-  Il ne génère pas plus d’une</span><span> </span><em>props</em><span> </span><span>a passer au composant encapsulé.</span></div>
<div><span> </span></div>
<div><span>- Il ne crée pas de dépendances implicites ( un ordre particulier dans les</span><span> </span><strong>HOC</strong><span> </span><span>par exemple ).</span></div>
<div><span>- Un comportement par défaut doit être partagé sur plusieurs</span><span> </span><em>components</em><span>.</span></div>
<div><span> </span></div>
<div><span>C’est ainsi que se termine notre article sur la transformation d’un</span><span> </span><strong>HOC</strong><span> </span><span>en</span><span> </span><strong>React Hook</strong><span>.</span></div>
</div>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/comment-transformer-un-higher-order-component-en-react-hook/">Comment transformer un higher order component en React Hook</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/comment-transformer-un-higher-order-component-en-react-hook/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vincent Journel vous présente comment créer des API de qualité avec API Platform</title>
		<link>https://www.winzana.com/vincent-journel-vous-presente-comment-creer-des-api-de-qualite-avec-api-platform/</link>
					<comments>https://www.winzana.com/vincent-journel-vous-presente-comment-creer-des-api-de-qualite-avec-api-platform/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 13:16:25 +0000</pubDate>
				<category><![CDATA[Backend]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[API Platform]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241326</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section_18 et_pb_section et_section_regular et_block_section preset--module--divi-section--default"><div class="et_pb_row_18 et_pb_row et_block_row"><div class="et_pb_column_18 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough"><div class="et_pb_video_1 et_pb_video et_pb_module et_block_module"><div class="et_pb_video_box"><iframe title="Prendre en main API Platform" width="1080" height="608" src="https://www.youtube.com/embed/NML4ccmjcY0?feature=oembed"  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div></div><div class="et_pb_text_18 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module preset--module--divi-text--default"><div class="et_pb_text_inner"><p><span>Une </span><strong>API</strong><span> (</span><em>Application Programming Interface</em><span>) est une interface de programmation permettant à deux applications de communiquer et d’échanger des données. Aujourd’hui, nous retrouvons des </span><strong>API</strong><span> de partout. Lorsque vous associez votre compte </span><strong>Facebook</strong><span> et votre compte </span><strong>Instagram</strong><span>, vous ne voyez rien mais pourtant les </span><strong>API</strong><span> font tout le boulot pour publier sur vos 2 réseaux en même temps et bien d’autres choses. Alors dans le développement, les </span><strong>API</strong><span> deviennent des éléments incontournables. Mais comment créer une </span><strong>API</strong><span> ? Nous vous invitons à la conférence animée par Vincent Journel, directeur technique de </span><strong>WinzAna</strong><span>. Il vous explique comment créer des </span><strong>APIs</strong><span> avec </span><strong>API Platform</strong><span> mais surtout, comment le faire bien !</span><br /><span>Maintenant installez-vous confortablement, prenez de de quoi noter et surtout, </span><em>enjoy</em><span> !</span></p>
</div></div></div></div></div><p>The post <a href="https://www.winzana.com/vincent-journel-vous-presente-comment-creer-des-api-de-qualite-avec-api-platform/">Vincent Journel vous présente comment créer des API de qualité avec API Platform</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/vincent-journel-vous-presente-comment-creer-des-api-de-qualite-avec-api-platform/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
