2.3 - Exercices


Th3 L33+0R

Créer un service qui reçoit un texte en paramètre de BODY et en retourne la version leet code.

Serveur

  • Réutiliser votre fonction de l'exercice 1.2 en l'isolant dans le fichier leet.rb que vous pourrez ensuite inclure dans votre serveur.
    • Inverser la case, les minuscules deviennent des majuscule et inversement
    • Ajouter certaines règles de substitution selon votre inspiration du moment, par exemple: les 'e' deviennent des '3', les 't' des '+', les 'a' des '@', etc.
  • Valider que le texte reçu n'est pas une string vide ou seulement des espaces, sinon afficher un message d'erreur
POST / 

Je m'appelle James!

===

j3 M'@PP3LL3 j@M3$!

~~~ Message vide

Fournir un message!

Client

  • Créer un client qui permet à l'utilisateur de saisir à la console le message à envoyer et lui affiche le résultat à la console
    • Le client demande un message en boucle jusqu'à ce que le message saisit soit vide
Message: Je m'appelle James!

j3 M'@PP3LL3 j@M3$!

Message: Allo

@LL0

Message:

Additionator

Créer un service qui calcule et retourne la somme des nombres contenus dans un tableau reçu en paramètre

  • Expérimentez avec différents mécanismes pour l'envoi d'un tableau en paramètre et créer une ROUTE par mécanisme
    • Query String
    • Body
    • JSON
  • Retourner le résultat au format JSON en indiquant 3 valeurs
    • input : la valeur brute reçue par le serveur
    • filtered : le input traité pour ne conserver que les nombres, ou tableau si aucuns nombres
    • sum : la somme des nombres dans filtered, que retourner si aucun nombre?
    • Réutiliser vos fonctions des exercices 1.2(Un petit plus et Que des nombres) en les isolant dans un fichier que vous pourrez ensuite inclure dans votre serveur.


- Créer ensuite une application client qui permet à l'utilisateur de saisir le tableau à la console en réutilisant le code de input.rb du même exercice, et afficher le résultat

GET /query?___

===

{
  "input": ___,
  "filtered": [___]
  "sum": ___
}
POST /body

___

===

{
  "input": ___,
  "filtered": [___]
  "sum": ___
}
POST /json

___

===

{
  "input": ___,
  "filtered": [___]
  "sum": ___
}

Charactor Generator

Développer une application serveur permettant de générer un personnage fictif de jeu de rôle.

  • Créer une route GET / qui retourne ce fichier HTML
    • Si votre serveur respecte le format de requête et réponse, l'application web pourra l'utiliser
    • Utiliser un navigateur web pour utiliser la page HTML via votre serveur
  • Créer une route POST / qui reçoit les informations du formulaire: prénom, nom, date de naissance
    • La page HTML utilise l'encodage www-form-urlencoded donc les valeurs sont disponibles dans Sinatra via la variable params dans la structure clé-valeur
    • Assurez-vous que toutes les données sont présentes, non-vides et que la date de naissance est formatée correctement YYYY-MM-DD avec des nombres
  • Utiliser le prénom, nom et les sections(année, mois, jour) de la date de naissance pour calculer les caractéristiques du personnage en important la fonction generator du fichier generator.rb
    • Les calculs qui donnent un nombre pourront être ajustés pour correspondre à un des choix des listes suivantes
types = ["mage", "knight", "rogue", "barbarian", "monk", "druid", "ranger", "paladin"]

races = ["dwarf", "elf", "human", "orc", "fairy"]


Affichage du client web

GET /

===

___Fichier charactor.html___

Génération du personnage

POST /

firstname=___&lastname=___&date_of_birth=___

===

{ "type" : "___", "name" : "___", "race" : "___" }

~~~ Si erreur

"Message d'erreur..."

Livre d'or

Créer un service web qui permet de récolter les commentaires laissés par les visiteurs d'un lieu/événement

  • Les messages sont enregistrés dans un fichier par le serveur
    • Vous devez définir le format utilisé pour enregistrer les données dans le fichier et la communication avec le client
    • Le fichier contient l'auteur et le message de chaque item publié
  • Le serveur offre 2 fonctionnalités
    • Liste des messages, du plus ancien au plus récent
    • Publication d'un message
      • Le serveur reçoit le nom et le message de l'utilisateur
      • Valider que les données ne sont pas vides et retourner "" si l'ajout fonctionne, sinon retourner un message d'erreur

Serveur

Liste

GET /

===

___LES MESSAGES___

Publication

POST /

___MESSAGE___

===

""

~~~ Nom ou message vide

___"Erreur ..."___  

  • Programmer un client qui exploite le serveur
    • Le client affiche la liste des messages existants et demande un message et le nom de l'auteur
    • Le client boucle jusqu'à ce qu'aucun message ne soit saisit

Client


Le livre d'or =-=-=-=-=-=-= Alice: First!!11!!1 Bob: Bravo! Eve: J'ai adoré, à refaire! ... Votre message: Bel endroit :) Votre nom: James =-=-=-=-=-=-= Alice: First!!11!!1 Bob: Bravo! Eve: J'ai adoré, à refaire! ... James: Bel endroit :) Votre message: allo Votre nom: Fournir un nom! Votre message:

[EXTRA] Jokes Interceptor

Créer un serveur qui permet de récupérer les blagues de l'API Dad Jokes

  • Votre serveur devient donc lui-même un client pour accéder à l'API Dad Jokes
    • La documentation de l'API indique de préciser le type de données attendu via un header, repérer dans la documentation de Faraday comment spécifier le header {"Accept" => "application/json"}
  • Votre serveur doit extraire seulement le texte de la blague reçue de l'API
  • Programmer ensuite un client en console qui affiche en boucle des blagues toutes les 30 secondes
    • Pour un affichage plus propre, l'appel system("clear") permet d'effacer la console
    • Pour intégrer le délai, la fonction sleep permet d'attendre selon une durée passée en paramètre
    • [DÉFI] Faire le délai d'une durée variable, qui dépend du nombre de mots de la blague(1 seconde par mot) ET ajouter une progression du délai(compteurs, barre de progression, etc)
GET /

===

Le texte de la blague

client

Le texte de la blague
....