IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Conception Web Discussion :

API REST : bonnes pratiques


Sujet :

Conception Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut API REST : bonnes pratiques
    Bonjour,

    J'ai lu pas mal de documentation sur la création d'API REST mais il y a pas mal d'auteurs qui se contredisent.
    J'aimerai donc des clarifications sur les bonnes pratiques à utiliser.


    ##############################
    Méthode HTTP : certaines personnes disent que pour envoyer des données, il faut utiliser uniquement des POST alors que d'autres préconisent d'utiliser POST (pour la création), PUT (pour la modification), DELETE (pour la supression)
    => qu'elle est la meilleure méthode ? on peut toutes les utiliser ? pourquoi ?


    ##############################
    Structure de l'URL, j'ai vu plusieurs méthodes pour envoyer des commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // {ids} = liste des id des ressources (utilisation du séparateur ",")
    POST api/<ressources>/{ids}/<ressources_enfants>/{ids}/action?key1=value1&key2=value2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // {ids} = liste des id des ressources (utilisation du séparateur ",")
    POST api/<ressources>/{ids}/<ressources_enfants>/{ids}/action 
    
    Envoie des paramètres en x-www-form-url-encoded
    key1=value1&key2=value2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // {ids} = liste des id des ressources (utilisation du séparateur ",")
    POST api/<ressources>/{ids}/<ressources_enfants>/{ids}/action 
    
    Envoie des paramètres en form-data
    key1=value1&key2=value2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // {ids} = liste des id des ressources (utilisation du séparateur ",")
    POST api/<ressources>/{ids}/<ressources_enfants>/{ids}/action 
    
    // Envoie des paramètres en JSON
    {
      key1 : value1,
      key2 : value2
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // {ids} = liste des id des ressources (utilisation du séparateur ",")
    // {action} = POST/PUT/DELETE selon l'action désirée
    {action} api/<ressources>/{ids}/<ressources_enfants>/{ids}
    
    // Envoie des paramètres en JSON
    {
      key1 : value1,
      key2 : value2
    }
    
    // Mais comment gérer si  on veut faire des actions spécifiques ?
    Est-ce qu'il y a des méthode à proscrire ? laquelle est la meilleure (la plus simple d'utilisaiton pour l'utilisateur) ? pourquoi ?


    ##############################
    Pour les informations retournées par le serveur, certaines personnes renvoie un objet JSON contenant le message d'erreur avec le code d'erreur dans le header HTTP alors que d'autre renvoie un objet JSON contenant le code d'erreur et le message.
    => les deux pratiques sont viables ? laquelle est la meilleure ? pourquoi ?


    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 586
    Par défaut
    Salut,

    Il-y a un standard avec openapi https://github.com/OAI/OpenAPI-Speci...2.md#httpCodes
    Pour POST https://developer.mozilla.org/fr/doc...P/M%C3%A9thode normalement c'est pour l'ajout et PUT pour le remplacement, après tant qu'on utilise pas une requête http delete pour ajouter
    Oui ont peut toutes les utiliser, selon ton api ou web service pour donner en lisibilité pour le client de cette api, si je prends une api et que je vois delete sans allez voir la doc je sais que ce sera pour supprimer, même chose pour put post et get.

    Pour les urls ou endpoints je ne sais pas si y'a vraiment une règle fondamental, juste méthode kiss et faire simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    api/<ressources>/{ids}/<ressources_enfants>/{ids}/action?key1=value1&key2=value2
    ça devient vite illisible si j'ai 30 key? Généralement on utilise du json ou xml.

    Voici un exemple d'api que je trouve bien fait https://docs.mollie.com/reference/v2...create-payment
    Message d'erreur dans le header! Ouvre ton inspecteur > network

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    Hello,

    Citation Envoyé par kevin254kl Voir le message

    Pour les urls ou endpoints je ne sais pas si y'a vraiment une règle fondamental, juste méthode kiss et faire simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    api/<ressources>/{ids}/<ressources_enfants>/{ids}/action?key1=value1&key2=value2
    ça devient vite illisible si j'ai 30 key? Généralement on utilise du json ou xml.

    Voici un exemple d'api que je trouve bien fait https://docs.mollie.com/reference/v2...create-payment
    Message d'erreur dans le header! Ouvre ton inspecteur > network
    Donc imaginons que tu es une liste de maisons et de chats. Si je voulais créer une api qui permettent d'autoriser les chats n°3 et 4 a visiter les maisons n°5 et 6, tu ferais comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    url : POST http://server/api/houses 
    {
      "ids":"5,6",
      "autorize":{
        "cats":{
          "ids":"3,4"
        }
      }
    }
    Autre Commande valide pur faire la même chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    url : POST http://server/api/cats 
    {
      "ids":"3,4",
      "autorized":{
        "house":{
          "ids":"5,6"
        }
      }
    }
    L’intérêt que je vois de mettre l'action dans le JSON au lieu d'utiliser les méthodes HTTP (POST, PUT, PATCH, DELETE) est que l'on peut exécuter plusieurs actions dans une requête (ex : autoriser et interdire des chats)... mais ce n'est peut-être pas RESTful ?

  4. #4
    Membre émérite
    Avatar de emixam16
    Homme Profil pro
    Chercheur en sécurité
    Inscrit en
    Juin 2013
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chercheur en sécurité

    Informations forums :
    Inscription : Juin 2013
    Messages : 335
    Par défaut
    Bonjour,

    Les deux commandes ne me paraissent pas déconnantes sur le principe.

    Mais tu devrais utiliser des tableaux en JSON pour faciliter le parsage de la requête.

    Autre remarque:
    - S'il ne peut y avoir que des chats il est inutile de faire un objet chat dans autorise, un objet suffit (ex: allowedCat)
    - S'il peut y avoir autre chose que des chats, tu pourrait faire une colonne type et une colonne id (ou un tableau anonyme si tu veux gagner quelques malheureux octets (je te le déconseille: premature optimization is the root of all evil -- Donald Knuth))

    Un exemple s'il peut y avoir des chats et des chiens :
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    url : POST http://server/api/houses 
    {
         "houseID" : [5,6],
         "allowed" : [ 
             {"type" : "cat", "id" : 3}, 
         {"type" : "dog", "id" : 4},
         ] 
    }

    --
    Bonne journée!

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 855
    Par défaut
    ok merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Guide complet et bonnes pratiques de développement d'API ReST
    Par yjaaidi dans le forum Contribuez
    Réponses: 0
    Dernier message: 31/03/2017, 00h19
  2. [3.x] API - Architecture et bonne pratiques
    Par julienbohy dans le forum Symfony
    Réponses: 1
    Dernier message: 30/05/2016, 10h35
  3. Réponses: 0
    Dernier message: 23/05/2016, 16h46
  4. Réponses: 3
    Dernier message: 14/01/2016, 09h57
  5. Réponses: 0
    Dernier message: 08/05/2015, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo