Votre logique reste la vôtre
Fóir n'héberge pas votre code. Vous écrivez une fonction, l'hébergez là où l'HTTP est servi et enregistrez son URL comme opération. Fóir l'appelle, la relance quand une relance peut aider et conserve une trace de chaque exécution.
Un contrat HTTP
Un appel à une opération est un HTTP POST avec un corps JSON : tout langage capable de servir de l'HTTP et de vérifier un jeton signé convient. Les helpers SDK publiés sont en JavaScript et TypeScript. Dans un autre langage, vous implémentez vous-même la requête et la vérification du jeton. L'endpoint doit être routable publiquement, et les adresses de bouclage, privées et de métadonnées cloud sont refusées à l'enregistrement puis de nouveau au moment de l'appel. Pour le travail en local, foir operations dev transmet à votre machine les envois du projet sans l'exposer.
Le jeton que porte chaque appel
Chaque appel porte un jeton signé de courte durée dans l'en-tête X-Foir-Token ; ce jeton est limité à cet envoi précis. Votre fonction le vérifie à l'aide des clés publiées de Fóir. Il porte exactement les capacités que l'opération a déclarées, comme lire les enregistrements d'un modèle ou écrire ceux d'un autre. Votre fonction ne détient aucune clé API. Elle construit son client à partir du jeton et appelle Fóir en tant qu'opération.
Lecture des secrets
Le même jeton permet à votre fonction de lire dans le projet les secrets. Elle en récupère un avec getSecret quand elle en a besoin, et rien n'est substitué dans la requête que Fóir envoie. L'exception est une opération à modèle, où Fóir appelle lui-même une API tierce et où aucun de vos codes ne s'exécute. Là, Fóir insère le secret dans la requête sortante depuis le coffre.
Relances et trace d'exécution
Un échec qu'une autre tentative pourrait corriger, comme un endpoint injoignable ou une erreur serveur, est relancé, trois fois par défaut. Une erreur client ou un refus ne l'est pas. Une exécution qui épuise ses relances va dans une file de lettres mortes, où vous pouvez l'inspecter, la relancer ou l'écarter. Chaque exécution est enregistrée avec son statut, sa durée, son résultat ou son erreur, son déclencheur et son nombre de relances. La même charge peut arriver plus d'une fois : écrivez donc le gestionnaire pour qu'il soit idempotent.
Lire le détail
Le guide des opérations couvre le contrat de requête et de jeton, les déclencheurs, les modes synchrone et asynchrone, les relances et la trace d'exécution.