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

Architecture Discussion :

Conception d'une API


Sujet :

Architecture

  1. #1
    Membre confirmé
    Avatar de sur_uix
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 550
    Points
    550
    Par défaut Conception d'une API
    Bonjour,

    Je suis en train de concevoir une application qui devra être piloté par d'autre applications qui serons développés par d'autres développeurs.
    Je suis un peu vague, je sais...

    Jusque là rien de particulier.
    Sauf que je n'ai pas d'expérience dans la conception d'une API pour mes futures clients !

    J'ai donc commencé à me documenter sur les BestPractice concernant la conception d'une API et j'ai aussi regardé comment font les autres.

    J'ai étudier les API de Google ainsi que leur clients C# !

    Exemple avec l'API Task
    http://code.google.com/apis/explorer/#_s=tasks&_v=v1

    Les namespace en C# de cette API sont :
    namespace Google.Apis.Tasks.v1.Data
    namespace Google.Apis.Tasks.v1

    Je note que le namespace contient la version de l'API.

    L'API est décomposé en trois groupes
    • Resource
    • Request
    • Response


    Les objets Response se trouvent dans le namespace Google.Apis.Tasks.v1.Data et les deux autres dans Google.Apis.Tasks.v1

    Google a fait une forte séparation entre les données et les méthodes.
    P.ex. pour créer une tâche dans une liste.

    Il faut, 1 - créer la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                var list = new TaskList();
                list.Title = SampleListName;
                list = service.Tasklists.Insert(list);
    Et l'insérer dans les tasklist.

    puis on crée la tâche et on l'ajoute à la liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                var mytask = new Task { Title = "Test the Tasklist API" };
                service.Tasks.Insert(mytask, list.Id).Fetch();
    Et la aussi la tâche et la liste sont en paramètres.
    Je suis surpris que la méthode insert(...)n'est pas membre de la classe TaskList.

    On a donc des données et un service avec des méthodes qui permet de manipuler ces dites données. Pourquoi cette séparations ?
    Est-ce-que c'est la règle lorsque l'on conçoit une API ?

    Merci d'avance pour vos feedback.
    Au plaisir de vous lire.

  2. #2
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Citation Envoyé par sur_uix Voir le message
    On a donc des données et un service avec des méthodes qui permet de manipuler ces dites données. Pourquoi cette séparations ?
    J'imagine qu'on essaie de canaliser sur le service les points d'accès à tout ce qui concerne les tâches. Moins il y a de points d'accès différents, moins les effets de bord consécutifs à une mauvaise utilisation seront possibles. Dans cette logique, TaskList.Tasks ne devrait pas être accessible non plus. Mais je suis d'accord que ce n'est pas très intuitif.

    Citation Envoyé par sur_uix Voir le message
    Est-ce-que c'est la règle lorsque l'on conçoit une API ?
    Absolument pas.

    Une présentation sympa sur la création d'API :


    les slides : How to Design a Good API and Why it Matters

  3. #3
    Membre confirmé
    Avatar de sur_uix
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 550
    Points
    550
    Par défaut
    Merci pour la présentation...je vais la regarder tranquillement.

    J'ai eu un autre feedback, en dehors de ce forum, concernant cette séparations, et on m'a répondu :
    "Que cela permet d'être indépendant du langage qui va utiliser l'API"

  4. #4
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Citation Envoyé par sur_uix Voir le message
    J'ai eu un autre feedback, en dehors de ce forum, concernant cette séparations, et on m'a répondu :
    "Que cela permet d'être indépendant du langage qui va utiliser l'API"
    Tu as une explication plus précise ? Je vois mal pourquoi utiliser service.Tasks.Insert plutôt que TaskList.InsertTask() changerait quoi que ce soit en termes d'indépendance par rapport au langage consommateur de l'API

  5. #5
    Membre confirmé
    Avatar de sur_uix
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 550
    Points
    550
    Par défaut
    Non pas plus, mais j'en ai déduis que c'est pour les langages non-objets !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Luckyluke34 Voir le message
    Tu as une explication plus précise ? Je vois mal pourquoi utiliser service.Tasks.Insert plutôt que TaskList.InsertTask() changerait quoi que ce soit en termes d'indépendance par rapport au langage consommateur de l'API
    a mon sens c'est parce que l'API (Google) étant d'abord ReST, les bibliothèques langages sont des proxy: ils n'ont pas de bonnes raisons d'en cacher la structure. Surtout que ces proxy risquent d'être générés plus ou moins automatiquement.

    On peut très bien imaginer écrire "TaskList.InsertTask()" "par dessus" mais dans ce cas on déborde de la simple proxy/façade de l'API ReST.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Conception d'une api
    Par ennaceur dans le forum UML
    Réponses: 1
    Dernier message: 08/12/2012, 16h33
  2. Conception d'une api
    Par Babaôrom dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 09/05/2007, 04h03
  3. Réponses: 5
    Dernier message: 15/02/2006, 17h16
  4. JEG : jAPI : Une API pour C++Builder
    Par JEG dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/11/2003, 13h50
  5. comment peut se servire d'une Api en delphi
    Par maamar dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/02/2003, 10h31

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