RESTE de l'API à l'aide de POST au lieu de GET
Supposons un service offre certains funcionality que je peux utiliser comme ceci:
GET /service/function?param1=value1¶m2=value2
Est-il juste de dire que je peux l'utiliser avec une requête POST?
POST /service/function { param1 : value1, param2 : value2 }
Sont ces deux requêtes de la même manière? Puis-je utiliser la deuxième variante dans tous les cas ou la documentation doit explicitement dire que je peux utiliser à la fois les requêtes GET et POST?
- Il n'y a pas de réponse générale à cette question - cela dépend de la personne mise en oeuvre. Et
GET
etPOST
devrait ont des sémantiques différentes, alors peut-être une manière générale, la réponse est "je n'espère pas" - REPOS et
function
ne vont pas bien ensemble. Si l'URL contientfunction
,method
, oucommand
, je sens l'odeur de la RPC - si votre objectif est de masquer la complexité de la structure de l'url elle-même, ne vous embêtez pas. à l'aide d'un
POST
méthode juste pour le "nettoyer" est un abus dePOST
si vous essayez de suivre les principes Reposant - Il n'y a pas de réponse générale à cette question dans une API HTTP qui ne respecte pas le standard. Vous pouvez faire ce que vous voulez. Si c'est Reposant, alors vous ne pouvez pas faire un POST si ce n'est pas documenté que la ressource n'est avec lui. Comme une question de fait, si c'est Reposant, il doit être à l'aide de HATEOAS, et vous ne seriez pas en train de faire un inattendu demande à quoi que ce soit.
- Vous pouvez souvent obtenir les mêmes résultats, même si vous utilisez différents verbes. Il dépend juste de ce qui se passe à l'intérieur de votre itinéraire contrôleur et la valeur de retour.. etc. Pourtant, il est bon de tenir à des conventions.
- Demande d'OBTENIR la longueur est limitée, ce qui si particulier OBTENIR la demande est très complexe et n'est tout simplement trop long? Comment peut-programmeur résoudre ce problème sans l'aide d'une requête POST, car le POST de longueur de demande est presque illimité?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser la
API
à l'aide dePOST
ouGET
si elles ne sont pas construire d'appel à l'aide de ces méthodes separetly. Comme si votre API direest accessible en utilisant
GET
méthode. Ensuite, vous ne pouvez pas appeler à l'aidePOST
méthode s'il n'est pas spécifié commePOST
méthode par son créateur. Si vous faites cela, vous ne peut se405 Method not allowed
état.Généralement dans
POST
méthode, vous devez envoyer le contenu dans le corps avec le format spécifié qui est décrit danscontent-type
- tête pour les anciens.application/json
pour les données json.Et après que le corps de la requête est obtient désérialisé à la fin du serveur. Si vous avez besoin de transmettre les données sérialisées par le client et il est décidé par le développeur de service.
Mais en général,
GET
est utilisé lorsque le serveur renvoie des données au client et n'ont aucun impact sur le serveur alors quePOST
est utilisé pour créer une ressource sur le serveur. Donc, en général, il ne devrait pas être la même.content-type
en-tête? Que faire si l'en-tête estContent-Type: application/x-www-form-urlencoded
et le contenu estJSON
?Juste pour examen,
REST
a certaines propriétés qu'un développeur doit suivre afin de le rendreRESTful
:Qu'est-ce que le REPOS?
Selon wikipedia:
Ce que les verbes doivent faire
De SORTE que l'utilisateur Daniel Vasallo a fait un bon travail en établissant les responsabilités de ces méthodes dans la question La compréhension de REPOS: les Verbes, les codes d'erreur et d'authentification:
Donc, pour répondre à votre question:
Si vous écriviez un simple vieux RPC appel d'API, ils pourraient techniquement interchangeables tant que le traitement côté serveur n'étaient pas différents entre les deux appels. Toutefois, pour que l'appel à être paisible, en appelant le point de terminaison via le
GET
méthode doit avoir une fonctionnalité distincte (ce qui est d'obtenir de la ressource(s)) à partir de laPOST
méthode (qui est de créer de nouvelles ressources).Note de côté: il y a débat sur le point de savoir si ou de ne pas
POST
devraient également être autorisés à être utilisés pour mettre à jour les ressources... même si je ne suis pas de commentaire sur ce, je vous dis juste que certaines personnes ont un problème avec ce point.- Je utiliser corps POST pour rien non négligeable et des applications d'entreprise pour les raisons suivantes:
BTW, j'ai aussi mis le champs pour rentrer dans mon corps POST que je ne souhaite pas exposer mes noms de domaine. La sécurité, c'est comme un oignon; de nombreuses couches et nous fait pleurer!
Penser. Lorsque votre client fait une requête GET à un URI X, ce qu'il dit au serveur: "je veux une représentation de la ressource située à X, et cette opération ne devrait pas changer quoi que ce soit sur le serveur." Une demande est en train de dire: "je veux que vous remplacez tout ce qui est de la ressource située à l'X avec la nouvelle entité, je vais vous donner sur le corps de cette demande". Une demande de SUPPRESSION en disant: "je veux que vous supprimez tout ce qui est de la ressource située à l'X". Un PATCH est en disant: "je vais vous donner ce diff, et vous devriez essayer d'appliquer à la ressource en X et dites-moi si elle réussit." Mais un POST est en train de dire: "je t'envoie ces données subordonnées à la ressource à X, et nous avons un accord préalable sur ce que vous devriez faire avec elle."
Si vous ne l'avez pas documenté quelque part que la ressource s'attend à un POST et fait quelque chose avec elle, il ne fait pas de sens d'envoyer un POST pour qu'il l'attend comme un GET.
RESTE s'appuie sur le comportement standardisé du protocole sous-jacent, et après, c'est précisément la méthode utilisée pour une action qui n'est pas normalisé. Le résultat d'un GET, PUT et DELETE demandes sont clairement définis dans la norme, mais ce POST n'est pas. Le résultat d'un POSTE est subordonné au serveur, donc si elle n'est pas documentée que vous pouvez utiliser POST pour faire quelque chose, vous devez supposer que vous ne pouvez pas.
En RESTE, chacun des verbes HTTP a sa place et son sens.
Par exemple,
Est d'obtenir la "ressource(s)" est indiqué dans l'URL.
POSTE est à instructure le backend de "créer" une ressource de l' 'type' a souligné dans l'URL.
Vous pouvez compléter le POST avec des paramètres ou des données supplémentaires dans le corps du POST-appel.
Dans votre cas, puisque vous êtes intéressés à "faire" l'info à l'aide de la requête, donc il doit être une opération GET au lieu de POST opération.
Ce wiki peut aider de clarifier davantage les choses.
Espérons que cette aide!
Il est agréable que le RESTE donne un sens aux verbes HTTP (comme ils ont défini), mais je préfère d'accord avec Scott Éclat.
Ici est aussi le point de WIKI explication détaillée sur Requête POST:
Je ne pouvais suggérer RESTE de l'équipe à envisager de sécuriser davantage l'utilisation du protocole HTTP pour éviter de faire des consommateurs lutte avec les non-sécurisé "bonnes pratiques".