04-09-2019, 11:46 AM
Salutations,
dans la plupart de nos (mes? au moins) formulaires HTML, le serveur doit faire des vérifications sur les champs des formulaires, qui sont soit triviales ("est-ce que 'quantité de ressources' est un entier entre 1 et 1.000.000.000?") soit nettement plus complexes ("est-ce que 'date de déplacement des ressources' est entre 'date actuelle du pays dans la BDD' et 'date actuelle du jeu'?") voire carrément tordues ("est-ce que la 'date 1' du formulaire est comprise entre 'date 2' du formulaire et 'date 3' + 6 mois si le champ 'type' du formulaire est 'A' et 'date 3 ' + 1 an si le champ 'type' du formulaire est 'B'?").
L'un des moyens pour faire ces checks, c'est de le faire côté client en JS (ou via les attributs des input pour les cas les plus triviaux). Seulement, cela pousse à dupliquer des logiques, ou en tous cas, à faire en sorte que ce que le serveur autorise soit strictement ce que l'UI autorise.
Parfois, c'est assez complexe et tordu à faire. Du coup, j'avais pensé à une autre idée: et si, au lieu de chercher à valider les choses côté client en copiant des logiques, je laissait le serveur valider le formulaire, mais sans faire l'action correspondante?
Cela correspondrait donc au process suivant:
- L'utilisateur modifie des valeurs dans son formulaire
- Du code JS envoie une requête au serveur avec le contenu du formulaire (on va supposer qu'il n'y a pas d'upload de fichier, histoire de rester léger!), en indiquant au serveur "valide juste que ces data sont OK"
- Le serveur fait tous les check simples ou complexes qu'on peut imaginer, et répond soit "HTTP 200 OK" si le formulaire est accepté, soit un message d'erreur indiquant quel champ ne va pas et pourquoi.
J'ai déjà la mécanique du serveur: mes endpoint font déjà les vérifications des input du client, et retournent déjà une réponse type HTTP 400 {"fieldnames":["date1", "date2"], message: "Date 1 must be grater than Date 2"}
Du coup, tout ce qu'il me suffit maintenant de faire, c'est un bout de JS qui va automatiquement soumettre le formulaire, en disant au serveur "ne fait pas réellement les opérations: valide juste les inputs".
Est-ce que vous connaissez des moyens "standards" de décrire ce comportement? Actuellement, je partirai sur un HTTP verb custom type "CHECK", qui serait considéré comme un "POST" mais sans faire les actions réelles derrière (pas de modif dans la BDD [ie: rollback ou juste pas d'appel à la procédure stockée de ma page]). Mais s'il y a d'autres méthodes plus "classiques" de décrire cela (un paramètre POST précis? un header HTTP custom?), je les prendrai plutôt que d'en monter une perso.
dans la plupart de nos (mes? au moins) formulaires HTML, le serveur doit faire des vérifications sur les champs des formulaires, qui sont soit triviales ("est-ce que 'quantité de ressources' est un entier entre 1 et 1.000.000.000?") soit nettement plus complexes ("est-ce que 'date de déplacement des ressources' est entre 'date actuelle du pays dans la BDD' et 'date actuelle du jeu'?") voire carrément tordues ("est-ce que la 'date 1' du formulaire est comprise entre 'date 2' du formulaire et 'date 3' + 6 mois si le champ 'type' du formulaire est 'A' et 'date 3 ' + 1 an si le champ 'type' du formulaire est 'B'?").
L'un des moyens pour faire ces checks, c'est de le faire côté client en JS (ou via les attributs des input pour les cas les plus triviaux). Seulement, cela pousse à dupliquer des logiques, ou en tous cas, à faire en sorte que ce que le serveur autorise soit strictement ce que l'UI autorise.
Parfois, c'est assez complexe et tordu à faire. Du coup, j'avais pensé à une autre idée: et si, au lieu de chercher à valider les choses côté client en copiant des logiques, je laissait le serveur valider le formulaire, mais sans faire l'action correspondante?
Cela correspondrait donc au process suivant:
- L'utilisateur modifie des valeurs dans son formulaire
- Du code JS envoie une requête au serveur avec le contenu du formulaire (on va supposer qu'il n'y a pas d'upload de fichier, histoire de rester léger!), en indiquant au serveur "valide juste que ces data sont OK"
- Le serveur fait tous les check simples ou complexes qu'on peut imaginer, et répond soit "HTTP 200 OK" si le formulaire est accepté, soit un message d'erreur indiquant quel champ ne va pas et pourquoi.
J'ai déjà la mécanique du serveur: mes endpoint font déjà les vérifications des input du client, et retournent déjà une réponse type HTTP 400 {"fieldnames":["date1", "date2"], message: "Date 1 must be grater than Date 2"}
Du coup, tout ce qu'il me suffit maintenant de faire, c'est un bout de JS qui va automatiquement soumettre le formulaire, en disant au serveur "ne fait pas réellement les opérations: valide juste les inputs".
Est-ce que vous connaissez des moyens "standards" de décrire ce comportement? Actuellement, je partirai sur un HTTP verb custom type "CHECK", qui serait considéré comme un "POST" mais sans faire les actions réelles derrière (pas de modif dans la BDD [ie: rollback ou juste pas d'appel à la procédure stockée de ma page]). Mais s'il y a d'autres méthodes plus "classiques" de décrire cela (un paramètre POST précis? un header HTTP custom?), je les prendrai plutôt que d'en monter une perso.