Open EmmanuelDemey opened 3 years ago
Je vais faire le focus API sur l'objet URL 10 minutes comme d'hab.
Voici un dump brut de mes notes:
Chronique sur URL
* Alors aujourd'hui on va faire un focus sur l'API URL (et sur URLSearchParams)
* https://developer.mozilla.org/en-US/docs/Web/API/URL
* https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
* Donc des APIs qui sont arrivées respstivement dans nos navigateurs
* URL Fx 10-2013 Cr 01-2014 Sf 09-2014
* URLSearchParams Fx 01-2016 Cr 03-2016 Sf 03-2017
* Node v7 (et 6.13) (en // des APIs legacy) + v10 en global
* https://nodejs.org/api/url.html
* https://nodejs.org/api/querystring.html
* Si vous ne devez retenir qu'une seule chose de cette chronique :
* N'essayez pas de parser des URLs vous même avec des regexs
* N'essayez pas de construire des URLs en faisant de la concaténation de chaîne
* Je dis ça car il y a pas mal de pièges auxquels on ne pense pas forcément
* J'en veux pour preuve la complexité des multiples spécifications
* https://datatracker.ietf.org/doc/html/rfc3986
* https://datatracker.ietf.org/doc/html/rfc3987
* https://url.spec.whatwg.org/
* https://github.com/bagder/docs/blob/master/URL-interop.md
* Il faut faire particulièrement attention quand on veut mettre des query params qui viennent d'entrée utilisateur
* Alors comment ça marche ?
* EXAMPLE basics
* On parse avec le constructeur `new URL()`;
* On sérialise avec `.toString()`
* Entre les deux on peut modifier n'importe quelle partie de l'URL
* EXEMPLE search-params
* Au delà d'un accès chaîne de caractère assez simple à la query string avec `search`, on a un objet `searchParams` avec pas mal de méthodes.
* https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams#methods
* Je m'en sers sur un projet où j'ai un worker CloudFlare codé en JS
* https://github.com/CleverCloud/clever-components-cdn/blob/master/cf-worker/index.js
* EXEMPLE pieges
* Ainsi on a pas à se prendre la tête avec l'échapement, pas de pièges
* Le dernier point que je veux mettre en avant c'est le fait que le constructeur accepte deux paramètres
* EXEMPLE esm-assets
* ça permet de construire des URL relative par rapport à une base
* c'est assez pratique dans des modules ES pour faire référence à une URL d'asset de manière relative
* on peut ainsi éviter d'utiliser des imports pour ça, ce qui n'est pas du tout standard
* nous on fait ça dans nos composants
* https://github.com/CleverCloud/clever-components/blob/master/src/tcp-redirections/cc-tcp-redirection.js#L12
* et du coup pour que le bundler puisse trouver ces assets, on a contribué un super plugin rollup au projet modern web
* https://modern-web.dev/docs/building/rollup-plugin-import-meta-assets/
On peut partager les liens si besoin ;-)
RàF :
PR: https://github.com/les-briques-du-web/les-briques-du-web-website/pull/1