Je Pythonne un peu avec Flask.
Assez rapidement, quelle que soit l'appli, on va manipuler des objets, les créer, les modifier, les supprimer etc. Je suis vite tombé sur REST et les différents verbes du HTTP mais si j'ai bien compris ça ne marche pas quand on se limite à un browser qui ne fait que du GET et POST.
Si pour lire un objet j'y accède via monsite/objet/<id>
en GET, quelle URL adopter pour du DELETE par exemple ? Un truc style monsite/objet/<id>/delete
en POST ?
Y a-t-il des us et coutumes particuliers ?
Merci !
# OpenAPI
Posté par cg . Évalué à 4. Dernière modification le 23 novembre 2023 à 10:53.
Hello,
tu peux suivre la norme OpenAPI.
Comme tu le dis, typiquement pour faire une suppression, on utilise la méthode DELETE de HTTP. Mais après tout, tu peux l'accepter avec un GET ou un POST, c'est ton API :).
L'idée c'est que souvent, dans le navigateur, les méthodes d'accès à l'API vont être exécutées par du JavaScript, et JavaScript peut préciser s'il veut faire du GET, POST, DELETE.
Il y a sans doute d'autres "normes".
[^] # Re: OpenAPI
Posté par gUI (Mastodon) . Évalué à 3.
Oui voilà j'ai pas précisé que je veux faire sans JS.
Je vais jeter un oeil à OpenAPI, merci.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: OpenAPI
Posté par cg . Évalué à 2.
Ah alors sans JavaScript, et si tu veux que ça fonctionne depuis un navigateur (drôle d'idée pour une API mais bon, je comprend l'envie de simplicité), tu es condamné à insérer le verbe dans l'URL1.
Un peu dans ce genre pour les quatre opérations CRUD :
Mais peut-être qu'on peut faire des liens en précisant le verbe genre de nos jours ? ↩
[^] # Re: OpenAPI
Posté par Cyril Brulebois (site web personnel) . Évalué à 2.
Je ne suis pas sûr de comprendre la contrainte sur le navigateur qui ne fait que GET et POST. Pour faire du REST (complet) depuis un navigateur, des greffons comme RESTED existent, et offrent toute la panoplie ?
Debian Consultant @ DEBAMAX
[^] # Re: OpenAPI
Posté par gUI (Mastodon) . Évalué à 3.
Oui mais je ne peux pas demander à mes utilisateurs de mettre un greffon rien que pour cette appli.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# Des API directement dans le navigateur ? Ou des routes
Posté par LeBouquetin (site web personnel, Mastodon) . Évalué à 10.
J'ai l'impression que le terme
REST
a orienté la lecture de certains utilisateurs qui comprennent que tu veux faire des APIs, maisREST
n'est pas spécifique aux APIs - cf la page wikipedia qui parle de Representational state transferPOST
ouGET
?L'idée derrière une architecture est d'avoir qqchose de carré et si possible le + intuitif possible.
Du coup je suggère d'utiliser :
GET
pour des requêtes en lecture uniquementPOST
pour tout le reste (création, modification, suppression)Ce principe fonctionne bien si tu es ok d'organiser la navigation via des formulaires (
Si tu prévois de faire les choses via des liens
<a href="xxx">Supprimer</a>
alors il faut utiliser desGET
et du coup l'archi serait plutôt :GET
pour des requêtes en lecture uniquement ou des action simples (exemple : supprimer une entité, activer/désactiver un utilisateur, etc)POST
pour tout le reste (création, modification)Routage
À partir de ce qui a été dit au dessus, le routage suivant me semble clair et intuitif :
GET http://foo.bar/entities
pour récupérer la listeGET http://foo.bar/entities/<id>
pour récupérer une entité précisePOST http://foo.bar/entities
pour créer une entitéPOST http://foo.bar/entities/<id>
ouPOST http://foo.bar/entities/<id>/update
pour modifier une entitéPOST http://foo.bar/entities/<id>/delete
pour supprimer une entitéCe à quoi tu peux envisager d'ajouter des routes du style :
POST http://foo.bar/entities/<id>/activate
pour activer une entité par exemple (en imaginant que tu aies un statut actif/inactif comme pour un utilisateur)POST http://foo.bar/entities/<id>/archive
pour activer une entité par exemple (en imaginant que tu aies un statut actif/inactif comme pour un utilisateur)D'une manière générale
POST
pour la création et modification et mets toutes les actions spécifiques en GETGET
est visible sur les intermédiaires. Tu trouves dans les logs Apache / NGINX les routes avec les paramètresGET
. Typiquement, ne mets pas de données sensibles enGET
(exemple : mot de passe, email, etc)GET
sont généralement exploités pour faire du filtrage, par exemple :http://foo.bar/events/?owner=4&category=birthday&after=2023-10-16T00:00:00
GET
sont généralement crawlés par les moteurs de rechercheJ'ai fait un petit tour de ce qui me vient à l'esprit, n'hésite pas si tu veux approfondir des trucs.
#tracim pour la collaboration d'équipe __ #galae pour la messagerie email __ dirigeant @ algoo
[^] # Re: Des API directement dans le navigateur ? Ou des routes
Posté par gUI (Mastodon) . Évalué à 5.
Mille mercis pour cette réponse !!! C'est exactement de ça dont je parle.
C'est plus ou moins ce que je m'apprêtais à faire, mais je comprend de ta réponse qu'il n'y a pas de "norme" ni même de "coutume".
Je prends bien note, encore merci !
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Des API directement dans le navigateur ? Ou des routes
Posté par cg . Évalué à 2.
Oui, je me suis grave fait enduire d'erreur par le biais REST ~= API.
Du bon vieux CGI et zou la soupe est prête ;) !
[^] # Re: Des API directement dans le navigateur ? Ou des routes
Posté par NeoX . Évalué à 3.
peut-etre parce que REST est une API
on parle d'ailleurs d'API REST :D
[^] # Re: Des API directement dans le navigateur ? Ou des routes
Posté par LeBouquetin (site web personnel, Mastodon) . Évalué à 3.
REST est un principe d'architecture ; ça peut s'appliquer à des APIs mais aussi simplement au routage d'une application web classique.
REST et API sont orthogonaux, comme REST et JSON ou JSON et API
#tracim pour la collaboration d'équipe __ #galae pour la messagerie email __ dirigeant @ algoo
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.