2017-05-07 1 views
-5

J'ai une méthode post qui ajoute un objet à DB. Mais qu'est-ce que je devrais retourner si rien n'a été ajouté? J'ai besoin de le gérer dans une requête ajax.Quel code HTTP dois-je retourner si rien n'est ajouté à db dans la méthode post?

+0

Pourquoi rien n'a été ajouté? – Ryan

+0

Voici la liste complète des codes d'état https://en.wikipedia.org/wiki/List_of_HTTP_status_codes –

+0

@Ryan, je ne sais pas. Peut-être perdre la connexion ou quelque chose. –

Répondre

1

Un statut 500 (erreur de serveur) aurait plus de sens pour moi.

  • 200 succès
  • 300 rediret
  • 400 erreur client (moi)
  • erreur de serveur
  • 500 (vous)

Vous n'avez pas ajouté l'objet que j'ai posté à vous, en le db, donc vous retournez 500. De cette façon, je peux attraper l'erreur.

Edité pour expliquer les codes d'état un peu mieux:

  1. Ne retournez pas 200 à moins qu'il y avait un succès avec le poste. Vous ne voulez jamais retourner 200 avec le message "n'a pas fonctionné"
  2. Si je vous envoie un mauvais objet/information pour enregistrer vous devriez envoyer 400
  3. Si la connexion sur votre extrémité est perdue ou il y a un problème avec le insérer une déclaration de 500 conviendrait probablement mieux.

De plus: Vous pouvez toujours envoyer des messages détaillés avec vos codes d'état. Mais en fonction des utilisateurs utilisant ce service, veillez à ne pas exposer/envoyer des informations comme des erreurs SQL.

+0

500: _Un message d'erreur générique, donné lorsqu'une ** condition inattendue ** a été rencontrée et ** aucun message plus spécifique ** est approprié._ Je ne pense pas –

+0

Rien ne vous empêche d'envoyer un 500 avec un spécifique message. Il vaut beaucoup mieux retourner une erreur quand il y a quelque chose qui cloche pour que je puisse attraper au lieu de réussir avec "ça ne marche pas" L'affiche a aussi donné un exemple de perte de connexion, qui est un 503. – Bergur

+0

Oui, _But ce que je devrais retourner si rien n'a ajouté_ comme l'OP a écrit - Ce n'est pas nécessairement une erreur interne –

-1

vous devez utiliser code d'état (204 ==> Pas de contenu)

+1

Seulement si c'était intentionnel de ne pas ajouter de données et pas en raison d'une erreur. En outre, 204 signifie que rien n'est renvoyé au client et ne signifie pas nécessairement que rien n'a été ajouté à la base de données. – fiskeben

+0

n'avez-vous pas juste besoin d'identifier ce cas particulier dans JS ?? vous définissez l'en-tête de réponse que vous voulez et vous devriez expliquer plus votre problème –

0

Si la raison est mauvais données du client sous une certaine forme, vous devez utiliser un statut dans la 400 gamme, le plus probable 422. Si la raison est due à une erreur sur le backend, vous devez en utiliser un dans la gamme 500. Il existe plusieurs codes d'état différents à utiliser. Vous devriez lire sur eux et utiliser celui (s) qui s'appliquent à votre scénario.

This is a good resource on HTTP statuses.

1

Selon ce qui est votre cas d'utilisation, vous pouvez:

Le nouvel objet constitue une violation des conditions - soit il existe déjà (contrainte unique) ou d'autres validations

-> Revenez ensuite 422 Unprocessable Entity aux côtés de quelques-uns message d'erreur dans le corps.

Vous faites côté serveur Déduplication - vous voulez envoyer gracieusement de nouveaux objets et ne se soucient pas duplications sur le côté client

-> Soit faire comme si tout est OK, à savoir 201 Created et retourner l'objet existant d'origine comme réponse .Ou distincte entre les états avec 201 Created pour objet nouvellement enregistré et 303 See other avec l'enregistrement original URL ou tout simplement 204 No content

Il y a erreur inattendue du côté du serveur pendant quelque chose d'économie qui devait être enregistré

- >500 Server Error