<?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>Open-source - Winzana</title>
	<atom:link href="https://www.winzana.com/category/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.winzana.com</link>
	<description>Façonnons le numérique à votre image</description>
	<lastBuildDate>Wed, 15 Oct 2025 08:07:16 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.winzana.com/wp-content/uploads/2025/04/logo-winzana.svg</url>
	<title>Open-source - Winzana</title>
	<link>https://www.winzana.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 et_pb_section_0 et_pb_with_background et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_0">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_0  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_0  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<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 et_pb_section_1 et_pb_with_background et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_1">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_1  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_1  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<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>&#8211;  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>&#8211; 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>&#8211; 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>Pourquoi et comment implémenter Flow sur un projet React Native</title>
		<link>https://www.winzana.com/pourquoi-et-comment-implementer-flow-sur-un-projet-react-native/</link>
					<comments>https://www.winzana.com/pourquoi-et-comment-implementer-flow-sur-un-projet-react-native/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 13:25:38 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[React-Native]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241331</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_2 et_pb_with_background et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_2">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_2  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_2  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><div>
<div>
<div>
<div>
<h2>Intro</h2>
<p>&nbsp;</p>
<p><strong>Flow</strong><span> </span>est un outil de développement déclaratif qui permet d’ajouter du typage de manière statique sur du<span> </span><strong>Javascript</strong><span> </span>et<span> </span><strong>JSX</strong>. Il permet de réduire les potentiels bugs liés au développement du programme durant le développement et non durant le runtime. Il permet entre autres de fournir une description plus complète lors de l’autocomplétion. C’est entre autres une des recommandations de l’équipe<span> </span><strong>React</strong><span> </span>: https://fr.reactjs.org/docs/static-type-checking.html</p>
<p>Dans cet article nous aborderons quatre points principaux :</p>
<ul>
<li>L’utilité de<span> </span><strong>Flow</strong></li>
<li>L’implémentation<span> </span><strong>Flow</strong></li>
<li>Exemples concrets d’utilisation</li>
<li>Comparaison rapide avec<span> </span><strong>TypeScript</strong></li>
</ul>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<h2>Pourquoi j’utiliserai<span> </span><strong>Flow</strong><span> </span>?</h2>
<p>&nbsp;</p>
<p>La première fonctionnalité de<span> </span><strong>Flow</strong><span> </span>est le typage des variables. En<span> </span><strong>React Native</strong><span> </span>ou plutôt<span> </span><strong>JavaScript</strong>, les variables ne sont pas typées. Ce qui au cours de l’évolution du programme peut devenir un handicap en termes de maintenance, et de fiabilité. Les changements de types au cours du déroulement du programme peuvent être dramatiques s’ils ne sont pas maîtrisés. Or avec<span> </span><strong>Flow</strong>, on peut maîtriser ces changements de type, à conditions de bien les typer. Et bien sûr, grâce au typage des variables, on obtient une autocomplétion encore plus intelligente et plus précise.</p>
</div>
</div>
<div>
<div> </div>
<p><span>Implémentation et utilisation de</span><span> </span><strong>Flow</strong></div>
<div><span> </span></div>
<div><span>Pour commencer à utiliser la bibliothèque</span><span> </span><strong>Flow</strong><span>, il vous faut tout d’abord l’installer</span></div>
<div> </div>
<pre><code>yarn add flow-bin</code></p>
<p><code></code><span>Ou</span></p>
<p><span></span><code>npm install --save flow-bin</code></pre>
<p>&nbsp;</p>
<div><code> </code></div>
<div><code></code><span>Ensuite, on modifie le</span><span> </span><i>package.json</i><span> </span><span>(si celle-ci n’est pas ajoutée automatiquement lors de l’installation).</span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td>
<div><span>{</span></div>
<div><span>//…rest,</span></div>
<div><span>« flow »: »flow »</span></div>
<div><span>}</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div><span>On initialise</span><span> </span><strong>Flow</strong><span> </span><span>via la commande ci-dessous :</span></div>
<div><span></span><code>npm run flow init</code></div>
<div><code></code><span>Ou</span></div>
<div><span></span><code>yarn run flow init</code></div>
<div><code></code><span>Et voilà !</span><span> </span><strong>Flow</strong><span> </span><span>est installé.</span></div>
<div><span> </span></div>
<div><span>Étayons un peu plus le sujet avec</span><span> </span><i>flow focus-check</i><span>. C’est une bibliothèque comprise dans</span><span> </span><strong>Flow</strong><span> </span><span>qui permet de vérifier les fichiers passés en</span><span> </span><i>pre-commit</i><span> </span><span>(ce qui est très utile pour déceler de potentielles erreurs qui peuvent être envoyées sur le git). C’est-à-dire que</span><span> </span><strong>Flow</strong><span> </span><span>va uniquement vérifier les dépendances des fichiers qui seront poussées au serveur et les fichiers eux-mêmes bien sûr.</span></div>
<div><span> </span></div>
<div><span>Utilisation de</span><span> </span><strong>Flow</strong></div>
<div><span>Il faut ajouter à chaque début de fichier auquel on veut que</span><span> </span><strong>Flow</strong><span> </span><span>reconnaisse les fichiers qu’il doit parser :</span></div>
<div><span></span><code>// @flow</code></div>
<div><code></code><span>on peut désormais utiliser la commande :</span></div>
<div><span></span><code>yarn run flow</code></div>
<div><code></code><span>ou :</span></div>
<div><span></span><code>npm run flow</code></div>
<div><code> </code></div>
<div><code></code><span>Celle-ci permet de demander à</span><span> </span><strong>Flow</strong><span> </span><span>de vérifier que notre code</span><span> </span><strong>Javascript</strong><span> </span><span>est typé correctement.</span><span> </span><strong>Flow</strong><span> </span><span>permet de signaler des erreurs de type de manière statique (au niveau de l’</span><i>IDE</i><span>) durant le développement.</span></div>
<div><span> </span></div>
<div><span>Exemples concrets</span></div>
<div><span>Au sein de cette sous-partie, nous allons voir les points évoqués lors de la présentation de</span><span> </span><strong>Flow</strong><span>. Vous aurez donc des exemples concrets pour chaque point. Pour l’occasion, nous créons un petit projet qui permet d’incrémenter un compteur. Tout d’abord, la déclaration des props ne se fait plus via les</span><span> </span><em>prop-types</em><span>, mais via</span><span> </span><strong>Flow</strong><span> </span><span>:</span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>type Props = {<br />/**<br />* Count value to increment<br />*<br />* @type {number}<br />*/<br />counter: number;<br />}</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div><span> </span></div>
<div><span>Ensuite on définit la</span><span> </span><em>View</em><span>, et on type les props reçues par le composant :</span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>const CounterView = ({ counter, incrementCounter }: Props) =&gt; (<br />&lt;View style=&gt;<br />&lt;Text&gt;{counter}&lt;/Text&gt;<br />&lt;Button onPress={incrementCounter} title= »Increment » /&gt;<br />&lt;/View&gt;<br />);<br />export default CounterView;</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div><span>Dans le container on instancie la</span><span> </span><em>View</em><span> </span><span>:</span></div>
<div><span> </span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>const CounterContainer = () =&gt; {<br />const [counter, increment] = useState(0);<br />const incrementCounter = useCallback(() =&gt; {<br />increment(counter+1);<br />},[counter]);<br />return (&lt;CounterView /&gt;);<br />}</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div><span>Et on constate que</span><span> </span><strong>Flow</strong><span> </span><span>nous indique que le composant</span><span> </span><em>CounterView</em><span> </span><span>n’est pas implémenté correctement.</span></div>
<div><span> </span></div>
<div><span>On implémente correctement notre</span><span> </span><em>CounterView</em><span>.</span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>return (&lt;CounterView counter={counter} incrementCounter={incrementCounter} /&gt;);</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div><span> </span></div>
<div><span>On ajoute maintenant un label optionnel à notre</span><span> </span><em>CounterView</em><span> </span><span>:</span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>type Props = {<br />….restProps<br />/**<br />* Optional Label for our counter<br />*<br />* @type {string}<br />*/<br />label?: string;<br />}</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div> </div>
<div><span> </span></div>
<div><span>Si on retourne sur le fichier de notre</span><span> </span><em>CounterContainer</em><span>, on se rend compte que</span><span> </span><strong>Flow</strong><span> </span><span>ne lance aucune erreur puisqu’il n’y en a pas. Label est optionnel, donc mon composant doit être fonctionnel même si je ne déclare pas la propriété label. Maintenant coté View, je veux que mon label soit en majuscules, pour qu’il soit bien visible.</span></div>
</div>
<div>
<div><span><img decoding="async" src="https://www.winzana.com/wp-content/uploads/2020/02/flow-error.html" alt="" title="" loading="lazy" /></span></div>
<div>
<p>Donc on tente ça :</p>
</div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span>&lt;Text&gt;{label.}&lt;/Text&gt;</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div>
<div>
<p>L’autocomplétion ne fonctionne pas, alors on force, parce que cette méthode on la connait par coeur quoi :</p>
</div>
</div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td><span> &lt;Text&gt;{label.toUpperCase()}&lt;/Text&gt;</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div>
<div>
<p>Mais là<span> </span><strong>Flow</strong><span> </span>n’est pas d’accord avec nous, et c’est normal ! On peut également caster nos variables, et faire la majorité des choses qu’on peut faire avec un langage comme<span> </span><strong>Java</strong><span> </span>ou<span> </span><strong>Swift</strong><span> </span>en termes de typage.</p>
</div>
</div>
<div>
<div> </div>
<p><span>En l’état mon composant n’est pas fonctionnel si label n’est pas défini ! Et</span><span> </span><strong>Flow</strong><span> </span><span>me le dit avant même que je lance l’application sans définir de label. Donc je vérifie que label soit bien défini pour afficher le label !</span><span><img decoding="async" src="https://www.winzana.com/wp-content/uploads/2020/02/flow-error-touppercase.html" alt="" title="" loading="lazy" /></span></div>
<div>
<div data-hs-responsive-table="true">
<table>
<tbody>
<tr>
<td> <span> </span><span>{label &amp;&amp; &lt;Text&gt;{label.toUpperCase()}&lt;/Text&gt;}</span></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
</div>
<div>
<div>
<p>Bingo ! Mon composant est fonctionnel !</p>
<p>&nbsp;</p>
<p>Bien évidemment avec cet exemple, nous avons seulement vu les bases de<span> </span><strong>Flow</strong>, comment on l’utilise, pourquoi l’utiliser. Mais sur un projet de grande envergure, le typage est d’une grande aide, et permet d’assurer une certaine fiabilité sur le long terme. Généralement<span> </span><strong>Flow</strong><span> </span>s’utilise au cours du développement et également dans une chaîne d’intégration continue.</p>
</div>
</div>
<div> </div>
<div><span>Rapide comparatif entre</span><span> </span><strong>TypeScript</strong><span> </span><span>et</span><span> </span><strong>Flow</strong></div>
<div><strong>TypeScript</strong><span> </span><span>est un langage de programmation</span><span> </span><em>Open Source</em><span> </span><span>conçu par Microsoft qui est utilisé pour le typage statique donc sensiblement la même utilité que</span><span> </span><strong>Flow</strong><span> </span><span>(sauf que</span><span> </span><strong>Flow</strong><span> </span><span>vient de Facebook). Vous l’aurez compris</span><span> </span><strong>TypeScript</strong><span> </span><span>est un langage de programmation alors que</span><span> </span><strong>Flow</strong><span> </span><span>n’est qu’un outil de productivité.</span></div>
<div><span> </span></div>
<div><span>Sur ce point là,</span><span> </span><strong>Flow</strong><span> </span><span>est d’une utilisation bien plus simple que</span><span> </span><strong>TypeScript</strong><span>. Comme dit précédemment,</span><span> </span><strong>TypeScript</strong><span> </span><span>est un langage de programmation, il faut donc apprendre la syntaxe, ce qui peut prendre du temps. Or</span><span> </span><strong>Flow</strong><span> </span><span>n’étant qu’un outil de productivité, on ajoute juste //@flow (comme vu dans la rubrique “Utilisation de Flow”).</span><span> </span><strong>Flow</strong><span> </span><span>possède donc un certain avantage sur la rapidité de prise en main.</span></div>
<div><span> </span></div>
<div><span>Le choix entre</span><span> </span><strong>TypeScript</strong><span> </span><span>ou</span><span> </span><strong>Flow</strong><span> </span><span>ne se résume pas seulement à la prise en main mais aussi à l’environnement dans lequel vous travaillez. Bien souvent les développeurs utilisant</span><span> </span><strong>Angular</strong><span> </span><span>vont opter pour l’utilisation de</span><span> </span><strong>TypeScript</strong><span> </span><span>qui représente le langage prédominant de cette technologie. Or si vous utilisez</span><span> </span><strong>React</strong><span>,</span><span> </span><strong>Flow</strong><span> </span><span>s’intègre beaucoup mieux à une architecture déjà en place.</span></div>
<div><span> </span></div>
<div><span>Pour conclure notre comparatif, il n’y a pas de “meilleur” entre</span><span> </span><strong>Flow</strong><span> </span><span>et</span><span> </span><strong>TypeScript</strong><span>. Ils ont des utilisations similaires mais chacun avec des spécificités utiles. L’environnement d’utilisation est souvent un facteur de décision entre</span><span> </span><strong>TypeScript</strong><span> </span><span>et</span><span> </span><strong>Flow</strong><span>. Néanmoins il est important de noter que, actuellement, la communauté</span><span> </span><strong>React Native</strong><span>/</span><strong>ReactJS</strong><span> </span><span>a tendance à s’orienter vers</span><span> </span><strong>TypeScript</strong><span>.</span></div>
</div>
<div>
<div>
<div>
<div>
<h2>Conclusion :</h2>
<p>Et c’est ainsi qu’on termine cet article sur<span> </span><strong>Flow</strong>. Tout du long de cet article, vous avez pu lire l’intérêt de<span> </span><strong>Flow</strong>, comment installer sa bibliothèque dans un projet<span> </span><strong>React Native</strong><span> </span>et comment l’utiliser avec des exemples concrets, ainsi qu’un comparatif entre<span> </span><strong>TypeScript</strong><span> </span>et<span> </span><strong>Flow</strong><span> </span>qui permet de peser le pour et le contre de chacun de ces outils.</p>
</div>
</div>
</div>
</div></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div><p>The post <a href="https://www.winzana.com/pourquoi-et-comment-implementer-flow-sur-un-projet-react-native/">Pourquoi et comment implémenter Flow sur un projet React Native</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/pourquoi-et-comment-implementer-flow-sur-un-projet-react-native/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 et_pb_section_3 et_pb_with_background et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_3">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_3  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_video et_pb_video_0">
				
				
				
				
				<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_module et_pb_text et_pb_text_3  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<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>
		<item>
		<title>GitHub : Exclude system gesture area</title>
		<link>https://www.winzana.com/github-exclude-system-gesture-area/</link>
					<comments>https://www.winzana.com/github-exclude-system-gesture-area/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Mon, 13 Oct 2025 11:55:06 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[GitHub]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241291</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_4 et_pb_with_background et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_4">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_4  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_4  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>Nos<span> </span><span>Winzanautes</span><span> </span>sont de véritables férues de<span> </span><span>codes</span><span> </span>!<span> </span><span>🧑‍💻</span></p>
<p>En plus de leur mission en interne à Winzana, ils continuent à pianoter sur leur clavier et à développer de<span> </span><span>nouveaux projets</span><span> </span>!</p>
<p>Ici, c’est notre<span> </span><span>pôle mobile</span><span> </span>qui est à l’honneur qui sont parvenus à développer un solution permettant de<span> </span><em><span>gérer les conflits de détection de gestes entre react-naviguation et android 10</span></em><span> </span>! 📱</p>
<p>Mais le plus dans tout ça, c’est que c’est entièrement disponible en<span> </span><span>open-source</span>.</p>
<p><span>En d’autres mots, si vous souhaitez la reproduire, l’améliorer ou tout simplement y jeter un œil, vous pouvez y aller ! 👋</span></p>
<p>Retrouvez tout les détails directement sur notre<span> </span><span>GitHub</span><span> </span>:<span> </span><a href="https://github.com/Winzana/rn-exclude-system-gesture-area"><span>https://github.com/Winzana/rn-exclude-system-gesture-area</span></a></p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div><p>The post <a href="https://www.winzana.com/github-exclude-system-gesture-area/">GitHub : Exclude system gesture area</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/github-exclude-system-gesture-area/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GitHub : Animated Tab Bottom Bar for react-navigation ! 🌊</title>
		<link>https://www.winzana.com/github-animated-tab-bottom-bar-for-react-navigation-%f0%9f%8c%8a/</link>
					<comments>https://www.winzana.com/github-animated-tab-bottom-bar-for-react-navigation-%f0%9f%8c%8a/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Mon, 13 Oct 2025 11:52:54 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=241286</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_5 et_pb_with_background et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_5">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_5  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_5  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>Nos<span> </span><span>Winzanautes</span><span> </span>sont de véritables férues de<span> </span><span>codes</span><span> </span>!<span> </span><span>🧑‍💻</span></p>
<p>En plus de leur mission en interne à Winzana, ils continuent à pianoter sur leur clavier et à développer de nouveaux projets !</p>
<p>Ici, c’est notre<span> </span><span>pôle mobile</span><span> </span>qui est à l’honneur et plus particulièrement son chef d’orchestre<span> </span><span>Jérémy</span><span> </span>qui est parvenu à<span> </span><em>développer une barre de menu pour mobile avec un effet de vague</em>, disponible en<span> </span><span>react</span><span> </span>! 🌊📱</p>
<p>Tout est détaillé et entièrement disponible en open-source.<br />En d’autres mots, si vous souhaitez la reproduire, l’améliorer ou tout simplement y jeter un œil, vous pouvez y aller !</p>
<p>Tout est accessible ici, sur<span> </span><span>GitHub</span><span> </span>:<span> </span><a href="https://github.com/Jm-Zion/rn-wave-bottom-bar"><span>https://github.com/Jm-Zion/rn-wave-bottom-bar</span></a> </p>
<p>La preview de l’animation est ultra smooth, un véritable plaisir pour les yeux 😎</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div><p>The post <a href="https://www.winzana.com/github-animated-tab-bottom-bar-for-react-navigation-%f0%9f%8c%8a/">GitHub : Animated Tab Bottom Bar for react-navigation ! 🌊</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/github-animated-tab-bottom-bar-for-react-navigation-%f0%9f%8c%8a/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Serverless avec Kubernetes en utilisant Knative</title>
		<link>https://www.winzana.com/serverless-avec-kubernetes-en-utilisant-knative/</link>
					<comments>https://www.winzana.com/serverless-avec-kubernetes-en-utilisant-knative/#respond</comments>
		
		<dc:creator><![CDATA[Astrid Van Hal]]></dc:creator>
		<pubDate>Tue, 15 Apr 2025 15:02:38 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Knative]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Serveless]]></category>
		<guid isPermaLink="false">https://www.winzana.com/?p=240384</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_6 blog-content et_pb_with_background et_section_regular" >
				
				
				
				
				
				
				<div class="et_pb_row et_pb_row_6">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_6  et_pb_css_mix_blend_mode_passthrough et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_6  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p>L&rsquo;écosystème du cloud computing connaît une évolution rapide avec l&rsquo;intégration de solutions serverless avancées. Parmi celles-ci, Knative, utilisé avec Kubernetes, se distingue comme une solution puissante pour les architectures serverless. Cet article se penche sur les aspects techniques de Knative et de son intégration avec Kubernetes, expliquant pourquoi et comment cette combinaison est devenue un choix stratégique pour les entreprises technologiquement avancées.</p>
<h2>Knative : Extension Serverless de Kubernetes</h2>
<p>Knative est une plateforme open-source innovante conçue spécifiquement pour optimiser et étendre les fonctionnalités de Kubernetes dans le contexte du computing serverless. Voici un aperçu détaillé de ses trois composants clés :</p>
<h3>Tekton Pipelines &#8211; Remplaçant de Knative Build</h3>
<blockquote>
<p>Fonctionnalités avancées de CI/CD : Tekton Pipelines apporte une solution de CI/CD native à Kubernetes, remplaçant la fonctionnalité de build de Knative. Il offre une personnalisation plus approfondie et une flexibilité accrue pour l&rsquo;automatisation du processus de construction et de déploiement des applications.</p>
</blockquote>
<blockquote>
<p>Intégration dans les Workflows Kubernetes : En s&rsquo;intégrant directement dans l&rsquo;écosystème Kubernetes, Tekton permet une gestion plus cohérente et homogène des workflows de construction et de déploiement.</p>
</blockquote>
<h3>Serving</h3>
<blockquote>
<p>Modèle de déploiement Scalable : Serving propose un modèle de déploiement d&rsquo;applications qui prend en charge le scaling automatique. Cela inclut le scaling horizontal en fonction de la demande, ainsi que la capacité de réduire les ressources à zéro lorsqu&rsquo;une application est inutilisée (scaling à zéro).</p>
</blockquote>
<blockquote>
<p>Routing Intelligent : Il intègre un système de routing intelligent qui dirige le trafic vers les différentes révisions de l&rsquo;application, facilitant le déploiement progressif et le testing A/B.</p>
</blockquote>
<blockquote>
<p>Support des Conteneurs : Serving est conçu pour prendre en charge divers types de conteneurs, offrant ainsi une grande flexibilité dans le choix des technologies et des langages de programmation.</p>
</blockquote>
<blockquote>
<p>Gestion de l&rsquo;État : Bien que principalement axé sur les applications stateless, Knative Serving peut également être configuré pour gérer certaines formes d&rsquo;état, ce qui le rend polyvalent pour une large gamme d&rsquo;applications.</p>
</blockquote>
<h3>Eventing</h3>
<blockquote>
<p>Gestion des Événements : Eventing est le composant de Knative qui gère les événements au sein de l&rsquo;écosystème Kubernetes. Il facilite la création, la gestion et le routage des événements entre les services.</p>
</blockquote>
<blockquote>
<p>Sources d&rsquo;Événements : Il peut se connecter à diverses sources d&rsquo;événements, internes ou externes, telles que les bases de données, les systèmes de messagerie ou les services cloud.</p>
</blockquote>
<blockquote>
<p>Déclencheurs et Abonnements : Eventing permet de définir des déclencheurs spécifiques qui activent les microservices en réponse à des événements, permettant ainsi de créer des architectures basées sur les événements.</p>
</blockquote>
<blockquote>
<p>Flexibilité et Interopérabilité : Ce composant offre une grande flexibilité et interopérabilité, permettant aux développeurs de lier facilement leurs services à un large éventail d&rsquo;événements et de sources.</p>
</blockquote>
<blockquote>
<p>Broker layer : Possibilité d&rsquo;utiliser des outils tel que Kafka ou RabbitMQ</p>
</blockquote>
<h2>Quel avantage d’utiliser Knative pour vos équipes de développeurs ?</h2>
<blockquote>
<p>Développement Agile : Knative accélère le développement et le déploiement des applications grâce à sa capacité à gérer automatiquement les aspects de l&rsquo;infrastructure.</p>
</blockquote>
<blockquote>
<p>Scalabilité Simplifiée : Knative offre une scalabilité automatique, y compris le scaling à zéro, ce qui est essentiel pour les applications à charge variable.</p>
</blockquote>
<blockquote>
<p>Intégration CI/CD Facilitée : Knative s&rsquo;intègre facilement dans les pipelines CI/CD, réduisant le temps et les efforts nécessaires pour la livraison continue.</p>
</blockquote>
<blockquote>
<p>Gestion des Événements et des Services : Knative simplifie la création d&rsquo;applications basées sur les événements, permettant aux développeurs de se concentrer sur la logique métier.</p>
</blockquote>
<blockquote>
<p>Environnement Kubernetes Optimisé : Utiliser Knative sur Kubernetes offre une expérience améliorée, en profitant de la robustesse et de la sécurité de Kubernetes.</p>
</blockquote>
<p>Un argument significatif en faveur de Knative pour les équipes de développement est la capacité à délivrer des environnements distincts pour chaque fonctionnalité. Cette approche permet :</p>
<blockquote>
<p>Déploiement par fonctionnalité : Les développeurs peuvent tester de nouvelles fonctionnalités dans des environnements isolés avant leur intégration dans la production.</p>
</blockquote>
<blockquote>
<p>Rapidité et flexibilité : Chaque fonctionnalité peut être développée, testée et déployée indépendamment, accélérant le processus de développement et de mise sur le marché.</p>
</blockquote>
<blockquote>
<p>Réduction des risques : Les erreurs ou les problèmes liés à une fonctionnalité spécifique peuvent être identifiés et résolus dans un environnement isolé, sans impacter l&rsquo;ensemble du système.</p>
</blockquote>
<h2>Comment aborder la mise en place de Knative</h2>
<h3>Les Défis</h3>
<blockquote>
<p>Complexité Technique : Kubernetes est un système complexe avec une courbe d&rsquo;apprentissage élevée.</p>
</blockquote>
<blockquote>
<p>L&rsquo;intégration de Knative ajoute une couche supplémentaire de complexité. Même s’il facilite l’usage de Kubernetes, il faut avoir une connaissance des concepts de la kubernetisation (Pod, Deployment, Service, PVC, …)</p>
</blockquote>
<blockquote>
<p>Expertise Requise : La mise en œuvre efficace nécessite une équipe avec une expertise approfondie en Kubernetes et Knative.</p>
</blockquote>
<blockquote>
<p>Gestion des Ressources : La gestion optimale des ressources et le scaling automatique requièrent une configuration et un monitoring attentifs.</p>
</blockquote>
<h3>Solutions</h3>
<blockquote>
<p>Formation et Certification : Investir dans la formation et la certification de l&rsquo;équipe , d’abord sur Kubernetes puis sur Knative.</p>
</blockquote>
<blockquote>
<p>Automatisation et Outils : Utiliser des outils pour automatiser et simplifier la gestion des clusters Kubernetes tels qu’ArgoCD, Kaniko, Tekton.</p>
</blockquote>
<blockquote>
<p>Partenariats Stratégiques : Collaborer avec des partenaires technologiques ou des consultants spécialisés pour combler les lacunes en matière de compétences.</p>
</blockquote>
<blockquote>
<p>Évaluation Continue : Évaluer régulièrement l&rsquo;architecture pour assurer son évolutivité et sa maintenance.</p>
</blockquote>
<h3>Approche Stratégique</h3>
<blockquote>
<p>Évaluation des besoins : Comprendre clairement les besoins de l&rsquo;entreprise et comment Knative peut les adresser.</p>
</blockquote>
<blockquote>
<p>Pilotage et Phases : Commencer par des projets pilotes avant de déployer à grande échelle.</p>
</blockquote>
<blockquote>
<p>Feedback et Adaptation : Être réactif au feedback de l&rsquo;équipe de développement pour améliorer continuellement les processus et les outils.</p>
</blockquote>
<blockquote>
<p>Ces stratégies peuvent aider à surmonter les défis techniques tout en maximisant les avantages de Knative en termes de flexibilité, de scalabilité et d&rsquo;efficacité des coûts.</p>
</blockquote>
<h2>Applications Pratiques de Knative</h2>
<h3>ETL Dynamique pour le Traitement de Données Volumineuses pour le département du Vaucluse</h3>
<blockquote>
<p>Scénario : Traitement des données d&rsquo;import volumineuses d&rsquo;APIDAE.</p>
</blockquote>
<blockquote>
<p>Détails Techniques : Utilisation de Knative pour orchestrer des conteneurs éphémères qui s&rsquo;activent pour traiter les données et s&rsquo;éteignent une fois le travail accompli, optimisant ainsi les ressources et les coûts.</p>
</blockquote>
<h3>Environnements de Développement Agile avec Knative</h3>
<blockquote>
<p>Scénario : Mise en place d&rsquo;environnements de développement avec scalabilité flexible.</p>
</blockquote>
<blockquote>
<p>Détails Techniques : Configuration de Knative pour déployer des environnements à la demande avec scalabilité de 0 (inactif) à n (actif), selon les besoins, réduisant ainsi les coûts d&rsquo;infrastructure.</p>
</blockquote>
<h3>Architecture Macro-service pour Yamay</h3>
<blockquote>
<p>Scénario : Gestion de trafic élevé et traitement de données en tâche de fond pour Yamay.</p>
</blockquote>
<blockquote>
<p>Détails Techniques : Mise en place de services Knative capables de gérer des pics de charge tout en exécutant des opérations de traitement de données parallèles, garantissant ainsi performance et analyse statistique efficace.</p>
</blockquote>
<h2>Conclusion : Adopter Knative pour une Innovation Agile dans le Cloud</h2>
<p>En conclusion, Knative, combiné à Kubernetes, représente une évolution majeure dans le cloud computing, offrant une flexibilité, une scalabilité et une efficacité accrues pour les architectures serverless. Pour les équipes de développement, Knative apporte agilité et innovation, permettant des déploiements par fonctionnalité et une réduction des risques. Néanmoins, les défis techniques, tels que la complexité de Kubernetes et la nécessité d&rsquo;une expertise approfondie, doivent être abordés par une formation adéquate, l&rsquo;utilisation d&rsquo;outils automatisés, et une évaluation continue. L&rsquo;adoption de Knative est une démarche stratégique, nécessitant une planification soignée et une adaptation constante. En fin de compte, Knative est un outil puissant pour les organisations cherchant à optimiser leur présence dans le cloud et à accélérer leur développement d&rsquo;applications serverless.</p></div>
			</div>
			</div>
				
				
				
				
			</div>
				
				
			</div><p>The post <a href="https://www.winzana.com/serverless-avec-kubernetes-en-utilisant-knative/">Serverless avec Kubernetes en utilisant Knative</a> first appeared on <a href="https://www.winzana.com">Winzana</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.winzana.com/serverless-avec-kubernetes-en-utilisant-knative/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
