2017-10-09 6 views
2

J'ai une API REST avec un point de terminaison POST pour l'inscription de l'utilisateur. Cependant, je veux aussi envoyer un email de bienvenue automatiquement, mais je pense que ce serait une mauvaise conception de faire cela comme un effet secondaire de la demande POST. Jusqu'à présent, je suis venu avec trois options:API REST Meilleures pratiques de messagerie électronique de bienvenue

  1. Demandez un autre critère que le navigateur appelle séparément pour lancer l'envoi courriel de bienvenue. Je ne sais pas ce que ce serait si (GET/POST?) Et il est quelque peu inefficace et sujette à l'abus depuis l'adresse e-mail doit être envoyé à nouveau.
  2. Avoir un champ "sendWelcomeEmail" optionnel dans le corps de la requête.
  3. Identique à 2, mais dans les paramètres de requête.

Peut-être que c'est subjectif, mais lequel de ce qui précède serait la meilleure pratique? Je n'ai pas l'impression que l'un d'entre eux correspond parfaitement à la facture, donc toutes les autres suggestions sont les bienvenues.

+4

Il est parfaitement acceptable pour une demande 'POST' d'avoir des effets secondaires! – Evert

+0

@Evert Merci pour votre contribution! Selon vous, lequel des trois est le meilleur moyen de le faire? – Akababa

+0

@akakaba, je l'ai clarifié un peu dans ma réponse. J'espère que cela résout pour vous – Evert

Répondre

3

Il est bon d'avoir une demande POST ont des effets secondaires. Je pense que ce serait une bonne pratique. L'hypothèse ici est que vous avez une ressource "users" qui représente votre liste de ressources.

Souvent, POST sera utilisé sur une ressource 'collection' pour créer une nouvelle entrée dans une collection.

Ce serait alors quelque chose comme:

POST /users 
Content-Type: application/json 

{ 
    "firstName": "foo", 
    etc... 
} 

Il est tout à fait bien pour le serveur d'envoyer automatiquement le message de bienvenue dans la même requête HTTP. Il n'est pas nécessaire de créer un second point de terminaison pour cela.

Donc, ma suggestion est pas avoir une requête HTTP secondaire.