web-dev-qa-db-fra.com

REST: Puis-je utiliser POST request pour lire les données?

Est-il contraire aux meilleures pratiques d'utiliser une requête POST pour lire les données? Y a-t-il des exceptions à cela? par exemple. Demandes d'authentification où vous devez POST données pour effectuer une action de lecture.

J'ai un appel d'API qui nécessite beaucoup de paramètres et c'est essentiellement une action Lire. Je ne peux pas utiliser la demande GET car elle peut atteindre la limite d'URI.

J'ai entendu dire que c'était contraire aux meilleures pratiques REST pour utiliser une requête POST pour lire les données et je préfère fortement suivre les meilleures pratiques car l'API est censée être publique accessible aux clients de l'entreprise.

Si je ne fais pas cela, comment dois-je concevoir mon API pour traiter correctement ces cas?

6
Mahdi

Une chose que nous avons fait là où je travaille est d'avoir une API de service de "stockage". Fondamentalement, vous POST un objet JSON au service, et il renvoie un UUID. Vous envoyez l'UUID en tant que paramètre de requête lors de tout appel d'API ultérieur et il obtiendra les paramètres/données du stockage C'est particulièrement pratique si vous effectuez plusieurs appels avec les mêmes données, car vous ne devez les envoyer qu'une seule fois.

7
TMN

Après avoir lu quelques questions similaires, j'ai réalisé que REST n'est pas réellement conçu pour résoudre ce problème. J'ai donc décidé d'opter pour JSON-RPC plutôt REST qui offre plus de flexibilité et semble être la bonne solution pour ce genre de problèmes.

2
Mahdi

Oui, vous pouvez le faire fonctionner au moins en utilisant WCF, c'est un peu différent dans MVC et Web API où vous ajoutez des attributs à des méthodes comme [GET] [POST] etc..

J'ai entendu dire que c'était contraire aux meilleures pratiques REST pour utiliser une demande de lecture des données POST et je préfère fortement suivre les meilleures pratiques car l'API est censé être accessible au public pour les clients de l'entreprise.

Bien sûr, c'est une mauvaise pratique d'utiliser POST pour obtenir des données en tant que POST est pour créer des ressources dans le système sans les obtenir).

Meilleures pratiques pour REST

J'ai un appel d'API qui nécessite beaucoup de paramètres et c'est essentiellement une action de lecture. Je ne peux pas utiliser la demande GET car elle peut atteindre la limite d'URI.

Utilisez un tableau pour envoyer des paramètres ou créez des objets si vos paramètres sont liés

2
Muhammad Raja

Pour améliorer la réponse de TMT au lieu d'utiliser un service de stockage pour stocker les UUID par rapport aux paramètres de demande. Vous pouvez à la place écrire une API sans état en utilisant jetons Web JSON . Cela éliminera le problème de la gestion du stockage, permettra la réutilisation et la mise en cache.

Le flux ressemblera à ceci:

  1. Le client envoie un objet JSON avec des paramètres de demande en tant que demande POST à votre API Tokenize.
  2. L'API renvoie un jeton Web JSON généré à l'aide de l'objet JSON fourni comme charge utile.
  3. Le client envoie une requête GET à votre API réelle avec ce jeton comme paramètre.
  4. Votre API (ou idéalement un middleware) décode le jeton pour obtenir les paramètres de demande et traite la demande.

Cette méthode ne nécessite aucun stockage.
La mise en œuvre de l'API réelle ne nécessite aucune considération particulière.
Garantit que les jetons ne sont pas altérés en cours de route.
Puisqu'il n'y a pas d'État, il n'y a pas lieu de s'inquiéter de la corruption des données. La mise en cache est beaucoup plus facile. L'application à plusieurs API est triviale et peut être effectuée sans supervision d'un autre membre de l'équipe.

Gardez à l'esprit que si votre charge utile est trop volumineuse, JWT peut l'être aussi. Assurez-vous que la longueur de votre URL ne dépasse pas 2000 caractères. J'ai essayé avec un JSON 1.9K et j'ai obtenu un JWT de 1695 caractères (qui devrait être plus que suffisant IMO)

1
Kasahs