Aller au contenu
FormFlow

Arrêter une soumission défectueuse avant Envoyer avec le contrôle en amont

Demandez le jugement du formulaire lui-même pendant que la personne est encore sur la page. Le contrôle en amont vérifie la forme de la requête, Origin et le schéma strict, ne stocke aucune ligne et ne promet jamais que la soumission réelle sera acceptée.

Cet article a été traduit automatiquement. Lire l'original en anglais

A dark FormFlow plate titled 'Ask before Send.' with a checklist reading Shape, Origin and Strict schema ready, and 'No side effects' kept.

Une soumission refusée coûte la seule chose que ce produit ne peut pas récupérer : une personne qui était sur la page et qui ne l’est plus. FormFlow conserve chaque refus comme un enregistrement sur lequel vous pouvez agir, et les signaux de santé du formulaire les comptent. Le contrôle en amont est la seule partie de ce jugement qui s’exécute avant Envoyer. Il est arrivé avec la v1.0.0.

Ce que répond un contrôle en amont

Envoyez un POST à /api/v1/f/{token}/preflight avec les réponses que votre formulaire aurait envoyées, en JSON, et le jeton public du formulaire dans le chemin. Le point de terminaison renvoie le jugement que le point de terminaison d’ingestion porterait sur ces réponses, sans le porter. Transmettez l’en-tête Origin de votre propre page et il est vérifié exactement comme le vérifie le point de terminaison de soumission. Le contrat est écrit dans la référence de l’API.

La réponse a quatre clés : ok, errors, checked et policy. errors est un objet dont les clés sont des noms de champ et les valeurs des listes de phrases ; il reste un objet même vide pour qu’un appelant généré puisse l’indexer. checked nomme ce qui a réellement été demandé — forme, origin et schéma — origin étant absent sur une page hébergée, parce que la page servie par FormFlow n’est pas soumise à votre liste d’origines autorisées.

Appelez-le pendant que la personne est encore sur la page

Un seul fetch suffit. Voici la forme de l’appel ; accrochez-le à l’événement auquel votre page fait déjà confiance, comme la sortie d’un champ.

const endpoint = 'https://formflow.digital/api/v1/f/YOUR_FORM_TOKEN/preflight'

async function preflight(answers) {
  const response = await fetch(endpoint, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
    body: JSON.stringify(answers),
  })

  // A 429 or an outage is not a verdict. Say nothing rather than something wrong.
  if (!response.ok) return null

  const { ok, errors, checked, policy } = await response.json()
  return ok ? [] : Object.entries(errors)
}

Affichez les phrases qui reviennent à côté du champ que chacune nomme. Ne reformulez pas les règles dans votre propre code : la raison d’être du point de terminaison est que le message lu par la personne soit le message que le point de terminaison aurait employé, dans la langue du formulaire et non dans celle de votre JavaScript.

Lire la réponse

Clé

Ce qu’elle contient

ok

true uniquement quand rien n’a refusé les réponses

errors

une entrée par nom de champ, chacune une liste de phrases

checked

ce qui a été demandé : forme, origin et schéma

policy.revision

la version de politique utilisée par le jugement

policy.fingerprint

l’empreinte qui identifie cette politique exacte

Deux clés de errors ne sont pas des champs. origin porte un refus de la liste d’origines autorisées, et submission porte un refus qui appartient au formulaire et non à une réponse précise, comme un formulaire fermé. Journalisez le bloc policy : la révision et l’empreinte ensemble identifient la politique exacte qu’a utilisée le jugement, ce dont vous avez besoin le jour où un succès ici est suivi d’un refus là-bas.

Ce qu’il ne demande pas

Il ne demande que la moitié de la décision qui est une fonction pure de la configuration du formulaire. Il n’exécute pas le score de spam, ne demande pas le défi Turnstile et ne regarde pas du tout les champs de fichier : un contrôle en amont ne transporte aucun octet, donc une image déclarée n’est ni vérifiée ni promise. Il ne stocke aucune ligne, ne consomme aucun quota et ne livre rien.

Il reste toutefois à l’intérieur du limiteur de débit. Un contrôle en amont partage le compartiment token|IP et le compartiment de requêtes de toute l’équipe avec le point de terminaison de soumission, si bien qu’une rafale peut renvoyer 429 avec Retry-After. Un 429 est l’absence de verdict, pas un refus, et la page doit se taire plutôt que d’inventer une erreur.

Où il se place

Tous les autres mécanismes que FormFlow possède pour une soumission refusée fonctionnent après qu’une personne a été refusée : le registre des refus, le signal de santé, la surface de refus et la boîte de récupération. Celui-ci est le seul qui fonctionne avant. Utilisez-le comme le premier des deux jugements, jamais comme le seul.

  • Un succès n’est pas une promesse. Le POST décide, et il décide à nouveau avec tout ce que le contrôle en amont n’a pas demandé.

  • Modifiez le formulaire entre les deux appels et la réponse peut changer avec lui. La révision de politique de la réponse est celle qui vous a jugé.

  • Les champs de fichier ne sont pas examinés : ne dites donc jamais à une personne que son image a été acceptée sur la foi d’un contrôle en amont.

  • errors a des noms de champ pour clés, mais origin et submission ne sont pas des champs ; affichez-les en haut du formulaire.

  • Quiconque détient le jeton public du formulaire peut l’appeler. Il ne prouve rien sur l’identité de l’appelant et ce n’est pas un secret.

Pointez votre premier formulaire vers FormFlow.

Aucun backend à construire, aucun frontend à héberger.

Commencer gratuitement