Outils pour développeurs

Les petites corvées qui coupent un après-midi : un JWT à lire, un payload à rendre lisible, une chaîne qui doit survivre à un query string. Chaque outil de cette page calcule dans l’onglet où vous êtes — et c’est tout l’argument, parce que ce qu’un développeur colle dans un formulaire de ce genre est précisément ce qui n’aurait jamais dû quitter son poste.

19 outils

  • Formater du JSONQuelqu’un a reçu un mur de JSON sur une seule ligne — réponse d’API, champ de journal, bloc de configuration — et doit en voir la structure avant de pouvoir en faire quoi que ce soit.
  • Décoder du Base64Quelqu’un tient une suite de caractères illisible et veut savoir ce qu’elle dit — un JWT, une valeur sortie d’un secret Kubernetes, une ligne de journal — sans la confier à un inconnu.
  • Convertir un timestamp UnixQuelqu’un voit un nombre de dix ou treize chiffres dans un journal, une colonne de base de données ou un payload JSON, et doit savoir quel instant il désigne, et dans quel fuseau.
  • Valider du JSONQuelque chose refuse le JSON de quelqu’un sans dire pourquoi, et il lui faut la ligne et la colonne du premier endroit qui coince.
  • Encoder en Base64Quelqu’un doit placer une chaîne là où elle n’est pas acceptée telle quelle : une data URI, un en-tête Basic Auth, un champ JSON qui doit survivre à un transport ayant des opinions sur les octets autorisés.
  • Générateur de hash SHA-256Quelqu’un a besoin du SHA-256 d’un texte — une valeur d’intégrité, une empreinte à comparer, un identifiant déterministe — et veut la réponse actuelle, celle qui n’est pas cassée.
  • Encoder une URLQuelqu’un assemble une URL à la main — un paramètre contenant une espace ou une esperluette, une cible de redirection qui doit survivre comme valeur dans une autre adresse — et doit savoir quels caractères échapper et lesquels surtout pas.
  • Générateur d’UUIDQuelqu’un a besoin d’un ou de plusieurs identifiants tout de suite — pour un jeu de données de test, une migration, un fichier de configuration — sans ouvrir un terminal pour cela.
  • Générateur de hash MD5Quelqu’un a besoin du MD5 d’un texte — pour le comparer à une valeur en base, pour reconstituer une clé de cache, pour une intégration ancienne qui l’exige encore.
  • Décoder une URLQuelqu’un lit une URL tirée d’un journal, d’un export d’analytics ou d’un message d’erreur, où la partie intéressante est enfouie sous des séquences de pourcentage.
  • Encoder en entités HTMLQuelqu’un place dans une page un texte qu’il n’a pas écrit — un commentaire, une description produit, un exemple de balisage — et veut que les caractères qui deviendraient des balises restent des caractères.
  • Décoder des entités HTMLQuelqu’un a sous les yeux un texte où les caractères ont été remplacés par leurs entités — champ de base, flux RSS, export de CMS — et veut lire ce qui était écrit au départ.
  • Minifier du JSONQuelqu’un doit ramener du JSON formaté sur une seule ligne, parce qu’il doit tenir dans une variable d’environnement, une colonne de base ou une ligne de journal où chaque octet compte.
  • Générateur de hash SHA-1Quelqu’un doit produire un SHA-1 parce qu’autre chose l’exige — un objet Git, un ancien schéma de signature, une intégration antérieure à 2017 — et non parce qu’il l’a choisi.
  • Analyser une URLQuelqu’un a une adresse longue devant lui et doit en voir les parties séparément — hôte, port, chemin, query, fragment — au lieu de les compter de tête.
  • Encoder en hexadécimalQuelqu’un doit voir les octets derrière un texte — pour un protocole, pour comparer un dump, pour un champ qui attend de l’hexadécimal — avec les séparateurs que son outil sait lire.
  • Décoder de l’hexadécimalQuelqu’un a un dump hexadécimal tiré d’un journal, d’une capture réseau ou d’un message d’erreur et veut savoir quel texte se cache derrière.
  • Analyser un query stringQuelqu’un a un query string plein de paramètres de suivi et veut une ligne par paramètre, valeurs décodées et sans que les clés répétées disparaissent.
  • Valider un UUIDQuelqu’un tient un identifiant et doit savoir si c’est un UUID bien formé, et quelle version et quelle variante il déclare.

Pourquoi « en local » n’est pas ici une question de goût

Ce que les gens collent dans un décodeur Base64, par ordre de fréquence : un JWT, un en-tête Basic Auth, le payload d’un webhook, un fichier de configuration. Trois sur quatre sont des identifiants ou en contiennent. Un site qui décode cela sur un serveur les a donc déjà vus, et les garde dans ses journaux de requêtes, que quelqu’un l’ait voulu ou non.

Ce n’est pas une objection théorique. C’est la raison pour laquelle ce genre entier de site est bloqué au proxy dans beaucoup d’entreprises, et pourquoi là où il ne l’est pas il existe une charte que personne ne lit. Tout ce qui se passe ici est de l’arithmétique qu’un navigateur sait faire seul ; l’envoyer ailleurs est une décision, et c’est la mauvaise.

Ce qui reste dans le navigateur, et ce qui n’y reste pas

La page est du HTML statique servi depuis un CDN. À la première frappe, un petit module JavaScript se charge, une fois puis depuis le cache, et le travail se fait dans votre onglet. Aucune requête n’emporte ce que vous avez saisi, et cela se vérifie dans l’onglet réseau plutôt que sur parole.

Deux limites honnêtes. La page elle-même est une requête : le fait que vous soyez venu ici est donc visible pour nous et pour votre réseau. Et le site porte de la publicité et, si vous l’acceptez, de la mesure d’audience : ni l’une ni l’autre ne voit le contenu d’un champ de texte, mais toutes deux sont des requêtes vers des tiers. La différence est celle qui sépare ce que vous écrivez du fait que vous soyez là : le premier ne bouge jamais, le second bouge nécessairement.

Ce que cela change pour le RGPD

Si les données ne quittent pas l’appareil, il n’y a ni transmission vers nous ni sous-traitance sur ce que vous collez. C’est le point qui tranche en pratique quand le champ contient une fiche client, un message de support ou un payload avec des données personnelles, et c’est pourquoi ces outils passent là où une version côté serveur ne passerait pas.

Ce qui se produit réellement est décrit dans la page de confidentialité et n’est pas maquillé ici : la visite, les requêtes publicitaires et de mesure, le consentement. Qu’un outil calcule en local ne rend pas le site entier neutre — cela en retire seulement la partie la plus lourde, celle qui intéresse la CNIL en premier.

Une question par page plutôt qu’un menu déroulant

Une page unique qui traiterait Base64, URL et HTML dans les deux sens derrière un sélecteur ferait moins de pages et de moins bonnes pages. Encoder et décoder échouent différemment, s’expliquent différemment et se cherchent différemment : celui qui a sous les yeux une séquence de pourcentage cassée et celui qui assemble un query string n’ont presque rien à se dire.

Chaque sens a donc sa page, avec les erreurs qui lui appartiennent : que faire quand du Base64 se résout en octets qui ne sont pas du texte, pourquoi `encodeURIComponent` laisse passer le point d’exclamation et ce que cela fait à une signature OAuth. C’est ce qui donne une page qui mérite d’être lue, et ce n’est possible que parce qu’elle ne s’adresse pas à six publics à la fois.

Ils fonctionnent hors connexion

Une fois la page d’un outil chargée, tout se passe en local : cela marche dans le TGV, en avion, et derrière un proxy d’entreprise qui bloquerait le domaine une heure plus tard. Aucun service worker n’est installé et il n’y a rien à configurer ; une page qui n’appelle jamais vers l’extérieur n’a tout simplement rien à perdre quand la connexion, elle, se perd.

En pratique, cela veut dire que ces outils servent exactement dans les situations où un outil en ligne serait le mauvais choix : sur un poste qui n’est pas le vôtre, sur un réseau auquel vous ne faites pas confiance, avec des données que vous ne devriez de toute façon pas déplacer. C’est pour ce cas-là qu’ils sont faits.

Sans compte, sans quota, sans filigrane

Il n’y a rien à créer parce qu’il n’y a rien à administrer. Les outils ne gardent rien d’une visite à l’autre : fermer l’onglet efface ce que vous aviez saisi, puisque cela n’a existé nulle part ailleurs que dans cet onglet.

Il n’y a pas non plus de limite de volume, et ce n’est pas de la générosité : votre temps de calcul ne nous coûte rien, il n’y a donc rien à rationner. Le seul plafond est la quantité de texte que votre propre navigateur accepte de tenir dans un champ.

Pourquoi les termes techniques restent en anglais

Ces pages écrivent payload, token, hash, query string et Base64 — pas charge utile, jeton, empreinte ni chaîne de requête. Ce n’est pas de la facilité : c’est la langue dans laquelle on parle de ces choses dans les équipes françaises, et celle dans laquelle on les cherche.

Là où le mot courant est français, c’est lui qui sert : somme de contrôle, octet, caractère, fuseau horaire, accent. La règle n’est pas « le plus de français possible » mais « le mot qui se dit à voix haute » ; toute autre règle produit une page correctement traduite que personne ne trouve.

Ce qui manque ici, et c’est délibéré

Il n’y a pas de formateur HTML, CSS ni JavaScript, et c’est une décision plutôt qu’un trou. Un formateur correct demande un vrai analyseur ; les bibliothèques employées pour cela pèsent plusieurs mégaoctets et seraient une décision de licence et de temps de chargement à part entière, et une version maison abîme des entrées en silence. Le formateur JSON n’est inoffensif que parce que cet analyseur-là est déjà dans le navigateur.

Il manque aussi un aperçu Markdown ou HTML. Les deux voudraient dire afficher du HTML étranger à l’intérieur de cette page, ce que la page de décodage des entités HTML refuse précisément, arguments à l’appui, parce qu’un tel analyseur peut déclencher des requêtes réseau. Un argument valable sur une page ne peut pas être ignoré sur la suivante.

Outils pour développeurs : questions fréquentes

Ce que je colle est-il envoyé à un serveur ?

Non. Chaque outil de cette section calcule dans la page elle-même, et l’onglet réseau est le moyen de le vérifier plutôt que de le croire. La page vient d’un CDN et le site porte de la publicité : il y a donc des requêtes, mais aucune n’emporte le contenu d’un champ de texte.

Y a-t-il une limite à la quantité de texte ?

Seulement ce que votre machine supporte. Rien n’est mis en file d’attente, compté ni plafonné, puisqu’il n’y a pas de serveur pour compter quoi que ce soit. Les entrées très grandes font réfléchir l’onglet un instant : c’est le seul plafond.

Faut-il un compte ?

Non, et il n’y a rien à quoi s’inscrire. Les outils ne retiennent rien d’une visite à l’autre : fermer l’onglet efface ce que vous aviez saisi, parce que cela n’a existé nulle part ailleurs.

Puis-je m’en servir avec les données de mon employeur ?

Votre charte interne en décide, mais la réponse technique est que les données ne quittent pas le poste, ce qui est justement l’objet de la plupart de ces chartes. S’il faut le démontrer plutôt que l’affirmer, ouvrez l’onglet réseau pendant l’usage : il n’y a rien à montrer.

Pourquoi n’y a-t-il pas de téléchargement avant le résultat ?

Parce qu’il n’y a pas de fichier. Le résultat est du texte dans la page, prêt à être sélectionné et copié, et rien ne serait gagné à vous faire appuyer sur un bouton d’abord. Là où un outil produit vraiment un fichier, le téléchargement est la dernière étape et non une barrière posée devant la réponse.