Précédent   Forum du club des développeurs et IT Pro > Général Développement > ALM > Architecture
Architecture Forum d'entraide sur les choix d'architectures logicielles, de patterns architecturaux, ainsi que la gouvernance des Systèmes d'Information (Urbanisation, Interopérabilité, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/12/2011, 14h48   #1
sur_uix
Membre expérimenté
 
Avatar de sur_uix
 
Inscription : mai 2002
Messages : 379
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2002
Messages : 379
Points : 509
Points : 509
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 :
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 :
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.
sur_uix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 21h03   #2
Luckyluke34
Membre éprouvé
 
Inscription : janvier 2011
Messages : 156
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 156
Points : 410
Points : 410
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 : http://www.scribd.com/doc/33655/How-to-Design-a-Good-API-and-Why-it-Matters
Luckyluke34 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2011, 14h14   #3
sur_uix
Membre expérimenté
 
Avatar de sur_uix
 
Inscription : mai 2002
Messages : 379
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2002
Messages : 379
Points : 509
Points : 509
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"
sur_uix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 14h46   #4
Luckyluke34
Membre éprouvé
 
Inscription : janvier 2011
Messages : 156
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 156
Points : 410
Points : 410
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
Luckyluke34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2011, 16h33   #5
sur_uix
Membre expérimenté
 
Avatar de sur_uix
 
Inscription : mai 2002
Messages : 379
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : mai 2002
Messages : 379
Points : 509
Points : 509
Non pas plus, mais j'en ai déduis que c'est pour les langages non-objets !
sur_uix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2011, 21h06   #6
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
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
wiztricks est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h37.


 
 
 
 
Partenaires

Hébergement Web