Hier, je suis rentré et, avant d'aller me coucher, à moitié endormi, j'ai décidé de coder quelque chose.

Quoi ? Je n'en avais pas la moindre idée.

tl;dr
Maintenant qu'il est terminé et disponible, dites-moi ce que vous en pensez !

Donc, je voulais faire un projet stupidement simple et minimaliste.

Il n'avait qu'un seul intérêt: raccourcir des URLs.

Pour cette raison, j'ai décidé de partir avec seulement 2 routes que l'utilisateur peut utiliser pour créer une nouvelle URL raccourcie ou récupérer une URL qui a été raccourcie, respectivement une route POST / attendant une cible (target) et une route GET /{code} attendant le code obtenu en réponse à l'envoi.

Une base de données ? Pourquoi se compliquer la vie ?

Nous avons une très simple relation: code raccourci -> url cible. Il suffit d'utiliser le code comme nom de fichier et le remplir avec l'URL cible.

La logique est simple: lorsque l'utilisateur tente de récupérer la cible (GET /{code}), il nous fournit le code raccourci.
On peut simplement vérifier l'existence d'un fichier nommé {code} dans le dossier de stockage et rediriger l'utilisateur vers l'URL qu'il contient ou bien retourner une 404 si le fichier n'existe pas.

En mettant ça de côté, un autre aspect que je voulais avoir était de pouvoir très facilement compter le nombre de requêtes et erreurs, le tout trié par jour.

J'ai utilisé un simple format de logging composé de deux fichiers, respectivement request-date(Y-m-d).log pour les requêtes et error-date(Y-m-d).log pour les erreurs.

Chaque requête entrante commence par <-- et chaque erreur est contenue en 1 seule ligne.

En résultat, pour compter le nombre de requêtes et d'erreurs, il nous suffit de faire grep '<--' request-{date}.log | wc -l pour le nombre de requêtes et wc -l error-{date}.log pour les erreurs.

Pour terminer, pour l'interface web, j'ai décidé de simplement utiliser Skeleton, vu qu'il n'y a presque rien à inclure.

La requête de réduction est faite en AJAX afin de ne pas recharger la page et de fournir un résultat propre et très rapide, mais dans le cas où l'utilisateur a désactivé javascript, le raccourcissement sera tout de même fait, même si le résultat sera bien moins présentable.

Le projet est disponible ici et j'ai développé un outil ligne de commande très simple (pour continuer à apprendre le langage Rust), dont le code source est disponible à ce lien.

Aucune réponse