Stage LP DI Madjid Bouchair SERFA, CDS

VOSpace : API Web REST en Python

Encadré par : André Schaaff

Semaine du 8 au 12 mai :

Point avec Ibrahim et nouvelles reflexions

Lundi, Ibrahim est passé faire un petit point sur le VOSpace et m'a fait un retour sur ses expérimentations sur le VOSpace de CANFAR.

Il était intéressé par l'avancement de mon projet et m'a indiqué des méthodes qui ne fonctionnaient pas sur le VOSpace CANFAR. En effet, les méthodes de téléchargement ou d'upload ne sont pas disponibles directement par requête HTTP mais uniquement par l'interface WEB de CANFAR, ce qui me porte à croire qu'elles ne suivent pas le protocole.

Nous avons eu un échange sur mes pistes sur la structure du document MongoDB, à savoir que chaque "Vospace" appartenant à un utilisateur est représenté dans son intégralité dans un seul objet itérable comme un dictionnaire.

Questionnement sur la structure des documents MongoDB

Suite à cette discussion, j'ai consulté la documentation MongoDB pour y trouver des solutions alternatives qui pourraient permettre des requêtes plus simples.

MongoDB propose plusieurs modèles d'arbres de données, celui qui m'a semblé le plus approprié est "Model Tree Structures with an Array of Ancestors":

ModelTree

Chaque node est un document à part entière avec des champs "ancestors" et "parent", qui correspond à l'ancêtre immédiat

db.categories.insert( { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )
db.categories.insert( { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )
db.categories.insert( { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" } )
db.categories.insert( { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" } )
db.categories.insert( { _id: "Programming", ancestors: [ "Books" ], parent: "Books" } )
db.categories.insert( { _id: "Books", ancestors: [ ], parent: null } )

La requête pour trouver tous les ancêtres ou le chemin vers la node :

db.categories.findOne( { _id: "MongoDB" } ).ancestors

Un index peut être créé sur le champ "ancestors" afin de pouvoir faire des recherches rapides

db.categories.createIndex( { ancestors: 1 } )

Une requête sur l'ancêtre permet de connaitre ses descendants

db.categories.find( { ancestors: "Programming" } )

Cette méthode doit être étudié sur mon temps de travail personnel.

Modification de méthodes

Certaines méthodes ont été modifié pour pouvoir être appelée par la "couche Rest"

Questions sur l'url des requêtes

Lors de ces modifications, plusieurs questions sont apparues sur l'url et les requêtes dont une qui est fondamentale.

Est-ce que le client fera ses requêtes de type getNode, setNode ou createNode sur la "racine" de son Vospace ?

curl -v "http://http://cds.u-strasbg.fr/vospace/Foo?detail=min&uri=vos://cds.u-strasbg.fr!vospace/Foo/Bar"

Par exemple pour un setNode:

curl -v -X POST -d @setNode.xml [...] "http://http://cds.u-strasbg.fr/vospace/Foo"

L'uri comprise dans le fichier xml indiquera la cible de l'action ?

logo_cds logo_serfa