L’université Paris-Dauphine crée et met à jour de nombreuses données publiques, qui sont parfois mises à disposition uniquement via son site web, voire parfois non mises à disposition et simplement conservées dans des bases de données.
Le mouvement open data considère que les données bénéficient d’une exposition maximale, dans des formats facilement lisibles par des machines. Entre autres bénéfices, cette approche facilite la réutilisation et l’innovation.
Ce projet a pour but de créer une plate-forme qui servira à la mise à disposition de certaines données publiques de Paris-Dauphine. Il visera à mettre également à disposition certaines données non publiques après authentification. Par exemple, un enseignant a droit d’accès aux adresses e-mail des étudiants qui suivent son cours, mais ces données ne sont pas publiques.
Il a été décidé de repartir de zéro afin d’éviter de devoir corriger ou découvrir trop de comportements non souhaités. Le projet va se décomposer en 2 parties.
-
La lib qui contient les entités et les Dao
-
Le serveur qui contient les servlets et qui dépend de la lib.
-
5 Entités : Person, Course, Lecture, Planning
-
1 Dao générique implémentant un CRUD simple.
-
1 Servlet générique exposant les entités en lecture seule, en Json et XML
-
Un test pour chaque URL exposée via Arquillian
-
Sérialisation de certaines entités sous d’autres formats :
-
Course au format CDM-fr
-
Planning au format VCal
-
Person au format VCard
-
-
Réalisation d’un client simple pour une démo
-
Déploiement dans IBM Cloud
-
Prise de contact avec la DSI de dauphine pour anticiper les fonctionnalites de l’itération 3 (URGENT)
-
route pour faire des filtres sur l’entité Course
-
création de classe pour faciliter la création des filtres pour la recherche des entités
-
Gestion des comptes et authentification
-
Gestion des privilèges et controle d’accès
-
Ces deux fonctionnalités seront développées de facon à être au maximum réutilisables lors de l’intégration avec le CAS de dauphine
Travis déploie l’application et Swagger-ui automatiquement depuis le branche master.
Les URLs sont :
Voici un exemple de commande curl pour faire un post :
curl -X POST "https://dauphine-open-datas2.eu-gb.mybluemix.net/person" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"firstName\":\"Didier\",\"lastName\":\"Sana\",\"ine\":\"187383\",\"office\":\"B134\",\"phoneNumer\":\"0183738\",\"training\":\"Mangement\",\"fax\":\"183938\",\"isActive\":true}"
Pour plus d’information sur comment fonctionne le déploiement, voir :
-
section
deploy
du travis.yml -
le script deploy-ibm-cf.sh
-
le manifest.yml
La doc sur swagger se trouve sur ici
Swagger-ui est déployé automatiquement sur ibmcloud : https://dauphine-open-datas-swagger-ui.eu-gb.mybluemix.net
Pour le lancer localement :
* installer le package npm http-server
* cd swagger-ui-dist && http-server --cors
Un client en ligne de commande est généré par le script ./scripts/generate-cli.sh
.
Pour s’authentifier, le client a besoin d’un token dans la variable $DOD_TOKEN
:
export DOD_TOKEN=$(./cli/client.sh authenticate username==sylvie password==789)
Pour créer un cours:
./cli/client.sh createCourse courseID=="42" courseName==maths courseDescription==complique instructionLanguage==fr
Pour lister les cours:
./cli/client.sh listCourses
Pour récupérer le cours avec l’identifiant 1:
./cli/client.sh getCourse id=1
Pour afficher toutes les commandes disponibles:
./cli/client.sh --help
## Une nouvelle fonctionnalité a été ajoutée pour faciliter les recherches sur la classe person ainsi que des Tests Junit 3 champs ont été retenus pour la recherche: * le nom qui fait référence au champ : firstName * le prénom qui fait référence au champ : lastName * le cours qui fait référence au champ : course * Voici quelques commandes pour faire des tests avec curl:
-
Faites un post avec en local avec curl :
curl -X POST "http://localhost:8080/person" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"firstName\":\"Dani\",\"lastName\":\"Sana\",\"ine\":\"187383\",\"office\":\"B134\",\"phoneNumer\":\"0183738\",\"training\":\"Mangement\",\"fax\":\"183938\",\"isActive\":true}"
-
Faites un get pour si tout marche
curl http://localhost:8080/person/personfilter?lastName=Sana&firstName=Dani
## Ajout de la fonctionnalité pour faciliter les recherches sur la classe lecture 4 champs ont été retenus pour la recherche: * le nom du groupe qui fait référence au champ : groupName * le nom de la salle qui fait référence au champ : room * le cours qui fait référence au champ : course * le nom et le prénom de la personne qui donne le cours +
-
Voici quelques commandes pour faire des tests avec curl:
-
-
Faites un post avec en local avec curl comme ceci:
curl -X POST \ http://localhost:8080/lecture \ -H 'Content-Type: application/json' \ -H 'Postman-Token: 1010e637-ab55-4ab1-8cc0-e9a41ee26424' \ -H 'cache-control: no-cache' \ -d '{ "room" : "B048", "course":
{ "courseName":"jee", "courseDescription" : "java", "courseID" :"1", "instructionLanguage" :"abc" }
, "teacher":{ "firstName":"olivier", "lastName" : "Cailloux", "isActive" : true
} , "date" : "2012-04-23", "duration" : "1", "groupName": "SITN", "room":"B048" }'
-
Faites un get comme ceci pour voir si tout marche ++
curl -X GET \ 'http://localhost:8080/lecture/lecturefilter?lfName=Massa&llName=Lolo' \ -H 'Content-Type: application/json' \ -H 'Postman-Token: 90c51b0d-7f87-4c8d-a52c-7fe707ce79a3' \ -H 'cache-control: no-cache' \ -d '{ "firstName":"Taric", "lastName" : "GANDI", "isActive" : true }
## Une nouvelle fonctionnalité a été ajoutée pour faciliter les recherches sur la classe person ainsi que des Tests Junit 3 champs ont été retenus pour la recherche: * le nom qui fait référence au champ : firstName * le prénom qui fait référence au champ : lastName * le cours qui fait référence au champ : course * Voici quelques commandes pour faire des tests avec curl:
-
Faites un post avec en local avec curl :
curl -X POST "http://localhost:8080/person" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"firstName\":\"Dani\",\"lastName\":\"Sana\",\"ine\":\"187383\",\"office\":\"B134\",\"phoneNumer\":\"0183738\",\"training\":\"Mangement\",\"fax\":\"183938\",\"isActive\":true}"
-
Faites un get pour si tout marche
curl http://localhost:8080/person/personfilter?lastName=Sana&firstName=Dani
Une documentation qui explique le mécanisme d’authentification est disponible ici.
Une documentation qui explique le mécanisme de contrôle d’accès est disponible ici.
curl -X POST \ http://localhost:8080/person/importvcard \ -H 'Content-Type: text/plain' \ -d 'BEGIN:VCARD VERSION:4.0 N:Gump;Forrest;;Mr.; FN:Forrest Gump UID:F467089i45oT7 TEL;TYPE=CELL,voice;VALUE=uri:tel:+1-111-555-1212 TEL;TYPE=FAX,voice;VALUE=uri:tel:+1-404-555-1212 NOTE:B407 EXPERTISE:Accounting EMAIL:[email protected] END:VCARD'