blog.notmyidea.org/pyconfr-2015-cliquet.html

137 lines
No EOL
7 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<title>PyconFR 2015 —&nbsp;Cliquet - Alexis Métaireau</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://blog.notmyidea.org/theme/css/main.css" type="text/css" />
<link href="https://blog.notmyidea.org/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Alexis Métaireau ATOM Feed" />
</head>
<body>
<section id="links">
<li>
<a class="" href="https://blog.notmyidea.org/" id="site-title">Blog</a>
</li>
<li><a class="" href="https://blog.notmyidea.org/pages/projets.html">Projets</a></li>
</section>
<header>
<h1 class="post-title">PyconFR 2015 —&nbsp;Cliquet</h1>
<time datetime="2015-10-17T00:00:00+02:00">17 octobre 2015</time>
</header>
<article>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Voici quelques notes prises durant la PyconFR 2015, à Pau. N&#8217;hésitez pas
à les completer si&nbsp;besoin.</p>
</div>
<p>Speaker: Mathieu Leplatre (&#64;leplatrem),&nbsp;Mozilla</p>
<p>Toolkit <span class="caps">HTTP</span>, pour éventuellement faire des&nbsp;microservices.</p>
<ol class="arabic simple">
<li>Origines</li>
<li>Protocole</li>
<li>Toolkit</li>
<li>Conversation</li>
</ol>
<div class="section" id="origines">
<h2>Origines</h2>
<p>Stockage de données, Cloud Services, Mozilla.
Le boulot, c&#8217;est de faire des APIs. On nous demande de faire des APIs, tout
le&nbsp;temps.</p>
<p>Souvent, les mêmes questions sont à l&#8217;ordre du jour. Heartbeat, codes
d&#8217;erreurs, etc. L&#8217;inventaire de tout ce qui est attendu d&#8217;une <span class="caps">API</span>, au dela de
ce qui est la valeur ajoutée du&nbsp;service.</p>
<p>Définition d&#8217;un protocole. Définir une <span class="caps">API</span> <span class="caps">REST</span> n&#8217;est pas aussi évident qu&#8217;il
y parait. Il faut définir les formats de <span class="caps">JSON</span>, les status,&nbsp;etc.</p>
<p>La réutilisation de certaines protocoles existants était possible (Sync, en
production depuis quelques&nbsp;années).</p>
<p>Réutiliser du code nous permettait et faire un template pour démarrer plus
facilement, pour se concentrer sur le métier de l&#8217;<span class="caps">API</span>. Puisque les besoins ne
sont pas toujours les mêmes, avoir une boite à outil permet de choisir ce que
l&#8217;on&nbsp;souhaite.</p>
</div>
<div class="section" id="protocole">
<h2>Protocole</h2>
<ul class="simple">
<li>Création d&#8217;un protocole qui respecte les bonnes pratiques. <span class="caps">CORS</span>, avoir les
bons codes de status, arrêter de se poser toujours les mêmes questions.
Contrairement à ce qu&#8217;on imagine, la spécification <span class="caps">HTTP</span> n&#8217;est pas si facile
à suivre. Plutôt que d&#8217;écrire un document, un toolkit à été&nbsp;créé.</li>
<li>Les ops ont besoin de quelques endpoints: un heartbeat (monitoring) des
endpoints de batch, un endpoint &#8220;hello&#8221;, pour connaitre le type de service,
ses URLs&nbsp;etc.</li>
<li>La service renvoie toujours un <span class="caps">JSON</span> avec la description de l&#8217;erreur. Cela
permet d&#8217;avoir tout le temps la même gestion des erreurs. Utilisation du
header &#8220;backoff&#8221; qui permet de demander aux clients d&#8217;arreter de faire des
requetes durant une durée spécifée par le&nbsp;serveur.</li>
<li>Pour les resources &#8220;<span class="caps">REST</span>&#8221;, quelques règles sont définies: quel est le format
du <span class="caps">JSON</span>, quel est la syntaxe du querystring pour filtrer, ordonner, gérer les
opérations concurentes,&nbsp;etc.</li>
<li>Comment la validation fonctionne ? La pagination ? La définition des
permissions ? Les&nbsp;erreurs.</li>
</ul>
<p>Définir le protocole une seule fois permet de se mettre d&#8217;accord avec les Ops.
On ne créé pas une <span class="caps">RFC</span> pour l&#8217;instant, il faut qu&#8217;on valide ce qu&#8217;on a fait,
il est necessaire de valider notre&nbsp;approche.</p>
</div>
<div class="section" id="toolkit">
<h2>Toolkit</h2>
<p>La stack en place est basée sur Pyramid et Cornice. Autre chose aurait pu petre
utilisé. Mais pyramid à été choisi pour son approche simpliste et qui permet de
rajouter de la complexité au fur et à&nbsp;mesure.</p>
<p>Cliquet propose de faire l&#8217;ensemble du boilerplate, la lecture du protocole, et
vous permet de créer les backends&nbsp;souhaités.</p>
<p>Il est possible de choisir les methodes <span class="caps">HTTP</span> acceptables, les URLs à utiliser
etc. Tweaker l&#8217;<span class="caps">API</span> est possible, la chose qui reste toujouts stable est le&nbsp;protocole.</p>
<p>le toolkit vise à faire quelque chose de pluggable. Tout est controllable
depuis la&nbsp;configuration.</p>
<p>Pour le deploiement, cela veut dire que le monitoring est déjà connecté, et il
est possible de changer la configuration depuis un fichier <cite>.ini</cite>.</p>
<p>Il est aussi possible de faire du profiling en ajoutant deux lignes de code,
qui permet de générer des graphs qui permettent d&#8217;identifier les goulots&nbsp;d&#8217;étranglement.</p>
</div>
<div class="section" id="microservices">
<h2>Microservices&nbsp;?</h2>
<ul class="simple">
<li>Cliquet apporte une manière standard de surveiller, deployer, configurer des&nbsp;services.</li>
<li>Il est possible de se focaliser sur la logique de l&#8217;application, en faisait
une abstraction des backends,&nbsp;etc.</li>
<li>Le fait de figer l&#8217;<span class="caps">API</span> permet d&#8217;avoir des clients génériques que l&#8217;on peu
réutiliser d&#8217;une application à&nbsp;l&#8217;autre.</li>
</ul>
</div>
<div class="section" id="cliquet-est-utilise-pour">
<h2>Cliquet est utilisé&nbsp;pour</h2>
<ul class="simple">
<li>Kinto, un service générique de stpclage de&nbsp;données.</li>
<li>Syncto, un proxy pour Sync en utilisant le&nbsp;protocole.</li>
<li>La liste de lecture, service qui à été&nbsp;shutdown.</li>
</ul>
</div>
<div class="section" id="questions">
<h2>Questions</h2>
<ul class="simple">
<li><strong>Qu&#8217;est-ce qui est pluggable ?</strong> Les choix qui sont fait dans cliquet
concernent le protocole. Le toolkit est lui fait de manière &#8220;pluggable&#8221;. Il
est par exemple possible de changer le backend, l&#8217;authentification, le cache
ou les&nbsp;permissions.</li>
<li><strong>Quelles sont les parties non standard? Est-il prévu de representer ça via
une <span class="caps">RFC</span> ?</strong> Le seul sujet qui pourrait etre utile dans une <span class="caps">RFC</span> serait de
définir les headers attendus pour la validation et l&#8217;écriture
concurrentielle. L&#8217;ensemble de ce qui est proposé est&nbsp;standard.</li>
<li><strong>Existe-il un client JavaScript, comme pour Kinto ?</strong> Actuellement, non. Par
contre, Kinto.js est prévu pour que la partie commune entre les APIs (le
protocole) peut etre&nbsp;extrait.</li>
</ul>
</div>
</article>
</body>
</html>