Introduction
Dans le cadre du projet Service d’accès aux données de la Vitrine-Recherche (SADVR, 2015-2016), une API REST a été développée par l’équipe du Centre d’expertise numérique pour la recherche (CEN-R) afin de redistribuer les données contenues dans le dépôt Vitrine-Recherche.
L’API REST développée par le CEN-R propose 5 services :
- Un service d'exposition des ressources à partir desquelles il est possible de filtrer les résultats du Service de recherche d'identifiant pérenne (idsadvr)
- Un service de recherche d'identifiant(s) pérenne(s) sur la base de 7 paramètres
- Un service de recherche d’identifiants pérennes étendu, pour les individus, permettant de recueillir davantage d’information que le service de recherche de base
- Un service de récupération de données pour un individu ou une unité de recherche par le biais d'un identifiant pérenne
- Un service de moteur de recherche dans des index qui permet de servir un outil de recherche en mode simple ou par critère
Dans la mesure où l’API fait usage du protocole Hypertext Transfer Protocol (HTTP), son fonctionnement n’est pas sans rappeler celui d’un site Web, à ceci près que les réponses de l’API sont formulées en JavaScript Object Notation (JSON) plutôt qu’en Hypertext Markup Language (HTML). Comme son nom l’indique, le format JSON est un format de données textuelles dérivé de la notation des objets du langage JavaScript. Comme le XML, le JSON permet de représenter de l’information structurée. Bien que le XML puisse être plus explicite quant à certains détails, le JSON reste le moyen le plus simple pour un développeur de traiter les données, tant en PHP qu'en JavaScript.
Nous supposons que l'utilisation du JavaScript inclut toujours celle de la bibliothèque jQuery; cette dernière facilitant les appels AJAX nécessaires à l'utilisation des API REST.
Requêtes et réponses
Le HTTP sépare les envois Web en deux types : les requêtes et les réponses. Le poste client fait une requête HTTP à un serveur, qui lui renvoie une réponse.
Requêtes (routes)
Voici les trois éléments de la requête utilisés dans le cadre du projet SADVR :
- la méthode
- l'URI ou la route
- les variables
La requête possède d'abord une méthode : GET, POST, PUT, DELETE, HEAD, etc. Dans la mesure où l'API REST offre uniquement un service de lecture de données, nous utiliserons exclusivement la méthode GET, qui spécifie justement la lecture seule. Taper une adresse Web dans un navigateur fait justement une requête GET à cette adresse.
La requête possède ensuite un URI (Uniform Resource Identifier) ou route. Comme son nom l'indique, elle identifie ce qu'on veut chercher par une adresse unique (ex: recherche d'individus : https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu)
La requête peut aussi posséder des paramètres, qui dans le cas de la requête GET sont ajoutés à la suite de l'URI, pour préciser la requête (ex: recherche de professeurs titulaires de certaines facultés données : https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu?fonction=42001&faculte[0]=01&faculte[1]=28)
Voici le domaine racine (préfixe)* avant chaque route pour l'API : https://www.recherche.umontreal.ca/vitrine/rest/api/1.7/umontreal/
*Le domaine racine n'est disponible que pour l'environnement de test actuellement. À terme, la documentation sera mise à jour afin que seul le domaine racine de l'environnement de production soit disponible.
Le /umontreal/ est inclus dans l'URI afin de permettre une utilisation éventuelle de l'API pour d'autres universités (Laval, Sherbrooke, etc.).
Réponses
Les réponses contiennent principalement deux éléments :
- un code HTTP
- un contenu
Bien qu'il existe une multitude de codes de réponses HTTP, nous en utiliserons principalement trois :
- 200 : OK. La requête est bonne et nous renvoyons une réponse avec contenu
- 400 : Mauvais requête (Bad request). La requête manque des éléments ou fait référence à des éléments inexistants
- 500 : Erreur interne côté serveur (Internal Server Error). Le code côté serveur provoque une erreur. Cela veut dire qu'un bogue existe dans le programme et que les développeurs doivent régler le problème
Dans le cas d'une réponse 200, le contenu sera toujours un JSON avec les données demandées.
Dans le cas d'une réponse 400 ou 500, le contenu sera le message d'erreur envoyé en JSON.
Identifiant pérenne (idsadvr)
Dans le cadre du projet SADVR, il était impératif de disposer d'un identifiant unique et pérenne représentant les principales entités du dépôt Vitrine-Recherche. L'objectif visé par la mise en place d'un tel identifiant est de pouvoir y référer, sans équivoque, de façon neutre et uniforme.
Par pérenne, on entend que cet identifiant pourra être "résolu" à perpétuité, soit directement, soit par le biais d'un service de redirection ou d'équivalence. Les entités disposant d'un identifiant dans la Vitrine-Recherche sont les individus (professeurs, chercheurs, chargés de cours, etc.) et les unités de recherche (chaires, groupes, centres, etc.).
À noter que le matricule attribué aux individus, dans les systèmes de l'Université de Montréal, a été écarté dans la mesure où il s'agit d'une donnée sensible ne pouvant être exposée publiquement, sans contrôle d'accès.
Changements par rapport aux versions antérieures
Pour obtenir la liste de principaux changements effectuées d'une version à l'autre de l'API, voir la page de recension des changements : API REST - Changements par rapport aux versions antérieures.
Service d'exposition des ressources
Le Service des ressources permet d’exposer l’ensemble des valeurs possibles pour 6 des 7 paramètres proposés par le Service de recherche d’identifiant pérenne.
Service | Requête : URI | Requête : paramètres | Réponse : champs pour chaque élément |
---|---|---|---|
Code SAD de toutes les facultés | ressource/faculte | uniterech : identifiant de l'unité de recherche (optionnel, multiple) |
|
Code SAD de tous les départements | ressource/departement | uniterech : identifiant de l'unité de recherche (optionnel, multiple) |
|
Code SAD de toutes les unités administratives | ressource/ uniteadmin | --- |
|
Code SAD de tous les titres de fonction | ressource/fonction | --- |
|
Numéro SAD de tous les programmes | ressource/programme | --- |
|
Identifiant de tous les domaines d'études | ressource/domaineetude | --- |
|
Nom de tous les champs d'expertise de recherche | ressource/expertiserech |
au moins l'un de ces deux paramètres est requis.
|
(ci-dessous mots-clés seulement)
|
Nom des secteurs de recherche | ressource/ | --- |
|
Disciplines | ressource/discipline | --- |
|
Nom des établissements affiliés à l'UdeM | ressource/etablaffilie | --- |
|
Code et nom des langues parlées et écrites | ressource/langue | --- |
|
Code et nom des types d'unités de recherche | ressource/typeuniterech | --- |
|
Règles d'affaire de l'exposition de l'expertise de recherche
Il n'est pas possible d'obtenir l'exposition globale de l'expertise, pour toutes les facultés et tous les départements confondus. Il faut préciser une (et une seule) faculté ou un ou des départements. On peut préciser une faculté ET un département, mais le département doit faire partie de la faculté indiquée. Dans ce cas, le fait d'inclure la faculté est inutile car le service retourne alors les mots-clés associés au département (et non tous les mots-clés utilisés par l'ensemble des départements de la faculté). Le service permet l'exposition de l'expertise conjointe de plusieurs départements. Toutefois, ceux-ci doivent tous faire partie de la même faculté.
Exemples de routes
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/faculte
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/faculte?uniterech=ur13711
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/faculte?uniterech[0]=ur13711&uniterech[1]=ur13581
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/departement
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/fonction
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/programme
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/domaineetude
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/expertiserech?departement=0337
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/langue
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/discipline
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/ettbaffilie
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/ressource/secteur_recherche
- https://www.recherche.umontreal.ca/vitrine/rest/public/api/1.8/umontreal/ressource/typeuniterech
Réponses
Faculté, bonne requête
Réponse avec bonne requête (200 : OK) pour ressource/faculte
. Les informations sont contenus dans l'élément data.
{"data": [ { "codeSad": "01", "nom": "Aménagement" }, { "codeSad": "03", "nom": "Arts et sciences" }, { "codeSad": "08", "nom": "Diététique et nutrition" }, [...] { "codeSad": "48", "nom": "Théologie et sc. des religions" }, { "codeSad": "99", "nom": "Université de Montréal" } ]}
Domaine d'étude, bonne requête
Réponse avec bonne requête (200 : OK) pour ressource/domaineetude
. Les informations sont contenus dans l'élément data.
{"data": [ { "id": "1", "nom": "Aménagement" }, { "id": "2", "nom": "Arts et musique" }, { "id": "3", "nom": "Communication" }, { "id": "4", "nom": "Droit" }, { "id": "5", "nom": "Économie et politique" }, { "id": "6", "nom": "Enseignement et sciences de l'éducation" }, { "id": "19", "nom": "Environnement et développement durable" }, [...] { "id": "13", "nom": "Technologies de l'information (TIC)" }, { "id": "14", "nom": "Théologie et sciences des religions" } ]}
Expertise de recherche, bonne requête
Réponse avec bonne requête (200 : OK) pour ressource/expertiserech?departement=0337
. Les informations sont contenus dans l'élément data.
{"data": [ { "nom": "14e siècle", "volet": "Période chronologique", "nbIndividus": 0, "nomTraduction": [ { "codeLangue": "eng", "nom": "14th century" } ] }, ... { "nom": "Afghanistan", "volet": "Pays", "nbIndividus": 0, "nomTraduction": [ { "codeLangue": "eng", "nom": "Afghanistan" } ] }, ... { "nom": "Afrique", "nomTraduction": [ { "nom": "Africa", "codeLangue": "eng" } ], "nbIndividus": 0, "volet": "Continent" }, ... { "nom": "Afrique du Nord", "nomTraduction": [ { "nom": "North Africa", "codeLangue": "eng" } ], "nbIndividus": 0, "volet": "Sous-région" }, ... { "nom": "Architecture", "volet": "Mot-clé", "nomTraduction": [ { "codeLangue": "eng", "nom": "Architecture" } ], "departement": [ { "departementCodeSad": "0337", "departementNom": "Département d'histoire", "nbIndividus": 1 }, { "departementCodeSad": "0104", "departementNom": "École d'architecture", "nbIndividus": 16 }, { "departementCodeSad": "0108", "departementNom": "École d'urbanisme et d'architecture de paysage ", "nbIndividus": 2 } ], "faculte": [ { "faculteCodeSad": "03", "faculteNom": "Faculté des arts et des sciences", "nbIndividus": 1 }, { "faculteCodeSad": "01", "faculteNom": "Faculté de l'aménagement", "nbIndividus": 18 } ] }, ... ]}
Service de recherche d’identifiant(s) pérenne(s) (idsadvr)
Service | Requête : URI | Requête : paramètres | Réponse : champs pour chaque élément |
---|---|---|---|
Identifiants pérennes de tous les individus | /id/individu |
|
|
Identifiants pérennes des unités de recherche | /id/uniterech |
|
|
Exemples de routes
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/uniterech
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu?uniterech=ur13605
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu?faculte=23
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu?departement=0328
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu?fonction=01001
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/uniterech?faculte=23
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/uniterech?departement=0328
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu?uniterech=ur13605&fonction[0]=42001&fonction[1]=42006
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/id/individu?recrutement=true
Réponses
Individu, bonne requête
Réponse avec bonne requête (200 : OK) pour id/individu
. Les informations sont contenus dans l'élément data.
{"data": [ { "idsadvr": "in13692", "prenom": "Sylvie C.", "nom": "Cartier", "fonction": "Professeure titulaire", "uniteAdmin": "Faculté des sciences de l'éducation - Département de psychopédagogie et d'andragogie", "courriel": "sylvie.cartier@umontreal.ca", "etablissementsAffilies": [], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/personne:13692.photoOfficiellePetite", "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/personne:13692.photoOfficielle" }, { "idsadvr": "in13749", "prenom": "Mohamed", "nom": "Hrimech", "fonction": "Professeur agrégé", "uniteAdmin": "Faculté des sciences de l'éducation - Département de psychopédagogie et d'andragogie", "courriel": "mohamed.hrimech@umontreal.ca", "etablissementsAffilies": [], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/personne:13749.photoOfficiellePetite", "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/personne:13749.photoOfficielle" } ]}
Unité de recherche, bonne requête
Réponse avec bonne requête (200 : OK) pour id/uniterech
. Les informations sont contenus dans l'élément data.
{"data": [ { "idsadvr": "ur13608", "nom": "Groupe de recherche en épidémiologie des zoonoses et santé publique", "acronyme": "GREZOSP", "responsables": [{ "idsadvr": "in14753", "prenom": "Jean-Pierre", "nom": "Vaillancourt", "fonction": "Professeur titulaire", "uniteAdmin": "Faculté de médecine vétérinaire - Départment des sciences cliniques", "courriel": "jean-pierre.vaillancourt@umontreal.ca" }], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/uniterech:13608.photoOfficiellePetite", "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/uniterech:13608.photoOfficielle" }, ... { "idsadvr": "ur13621", "nom": "Centre de recherche interdisciplinaire en réadaptation du Montréal métropolitain", "acronyme": "CRIR", "responsables": [ { "idsadvr": "in14505", "prenom": "Bonnie", "nom": "Swaine", "fonction": "Professeure titulaire", "fonctionCodeSAD": "42001", "uniteAdmin": "Faculté de médecine - École de réadaptation", "courriel": "bonnie.swaine@umontreal.ca" }, { "idsadvr": null, "prenom": "Eva", "nom": "Kehayia", "fonction": null, "fonctionCodeSAD": null, "uniteAdmin": null, "courriel": null } ], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/uniterech:13621.photoOfficiellePetite", "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/uniterech:13621.photoOfficielle" }, ]}
Mauvaise requête (400 : Bad request)
Réponse avec mauvaise requête (400 : Bad request). Les erreurs sont contenues dans l'élément errors, selon le paramètre problématique
{ errors: { uniterech: [ "Le paramètre uniterech doit être un entier ou un tableau d'entiers." ] } }
Erreur serveur interne (500 : Internal server error)
Réponse avec erreur du côté serveur (500 : Internal server error). Le message d'erreur sera dans l'élément errors.
{ errors: "SQLSTATE[42000] [1044] Access denied for user 'usager'@'1.1.1.1/255.255.255.255' to database 'database'" }
Service de recherche d’identifiants pérennes étendu pour les individus
Service | Requête : URI | Requête : paramètres | Réponse |
---|---|---|---|
Identifiants pérennes de tous les individus | /idext/individu |
Note : Il est recommandé de spécifier au moins paramètre afin éviter d'obtenir |
(ci-dessus, premier niveau seulement; voir exemple de réponse pour détails) |
Exemples de routes
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/individu
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/individu?uniterech=ur13605
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/individu?faculte=23
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/individu?faculte=23&recrutement=true
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/individu?departement=0328
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/individu?fonction=01001
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/uniterech?faculte=23
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/uniterech?departement=0328
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/idext/individu?uniterech=ur13605&fonction[0]=42001&fonction[1]=42006
Réponses
Individu, bonne requête
Réponse avec bonne requête (200 : OK) pour idext/individu
. Les informations sont contenus dans l'élément data.
{ "data": [ { "idsadvr": "in12345", "prenom": "Claude", "nom": "Toupin", "affiliations": [12345 { "fonction": { "codeSad": "42001", "nom": "Professeur titulaire" }, "uniteAdministrative": { "codeSad": "N202A0", "nom": "Faculté des arts et des sciences - Département d'histoire" }, "departement": { "codeSad": "0337", "nom": "Département d'histoire" }, "faculte": { "codeSad": "03", "nom": "Faculté des arts et des sciences" }, "courrielInstitutionnel": "claude.toupin@umontreal.ca", "telephone": { "numero": "5143436111", "poste": "6543" }, "immeuble": "Pavillon Lionel-Groulx", "local": "C6534-1", "exclusion": "0", "exclusionTel": "0" } ], "etablissementsAffilies": [], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/personne:12345.photoOfficiellePetite", "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/personne:12345.photoOfficielle", "courriels": [], "telephones": [ { "numero": "5143436543", "poste": null, "categorie": "Travail 1" }, { "numero": "5143431234", "poste": null, "categorie": "Télécopieur" } ], "expertise": { "secteursRecherche": [ { "uid": "10", "codeLangue": "fre", "nom": "Sciences sociales et humaines", "ordre": "1" }, { "uid": "10", "codeLangue": "eng", "nom": "Social Sciences and Humanities", "ordre": "1" } ], "disciplines": [ { "uid": "100", "codeLangue": "fre", "nom": "Archéologie", "ordre": "1" }, ... { "uid": "100", "codeLangue": "eng", "nom": "Archaeology", "ordre": "1" }, ... ], "motsCles": [ ... { "uid": "157", "nom": "Urbanisme", "ordre": "6", "codeLangue": "fre", "departement": "École d'urbanisme", "departementCodeSAD": "0107", "faculte": null, "faculteCodeSAD": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "157", "nom": "City planning", "ordre": "6", "codeLangue": "eng", "departement": "École d'urbanisme", "departementCodeSAD": "0107", "faculte": null, "faculteCodeSAD": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "2137", "nom": "Grèce ancienne", "ordre": "5", "codeLangue": "fre", "departement": "Département d'histoire", "departementCodeSAD": "0337", "faculte": null, "faculteCodeSAD": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "2137", "nom": "Ancient Greece", "ordre": "5", "codeLangue": "eng", "departement": "Département d'histoire", "departementCodeSAD": "0337", "faculte": null, "faculteCodeSAD": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, ... ], "pays": [], "continents": [], "periodesChronologiques": [ { "uid": "37", "ordre": "7", "codeLangue": "fre", "nom": "Antiquité" }, { "uid": "37", "ordre": "7", "codeLangue": "eng", "nom": "Antiquity" } ], "phraseCle": [ { "codeLangue": "fre", "contenu": "Archéologie et histoire grecque" } ] }, "urlVitrine": [ { "nom": "Vitrine de la recherche", "url": "http://www.recherche.umontreal.ca/la-recherche-a-ludem/la-vitrine-des-professeurs/informations/chercheur/1234/" }, { "nom": "Répertoire des experts à l’intention des médias", "url": "http://www.recherche.umontreal.ca/la-recherche-a-ludem/la-vitrine-des-professeurs/repertoire-des-experts-a-lintention-des-medias/informations/chercheur/1234/" } ], "recrutementRecherche": false }, { "idsadvr": "in14321", "prenom": "Paul", "nom": "Hurtubise", "affiliations": [ { "fonction": { "codeSad": "42001", "nom": "Professeur titulaire" }, "uniteAdministrative": { "codeSad": "N202A0", "nom": "Faculté des arts et des sciences - Département d'histoire" }, "departement": { "codeSad": "0337", "nom": "Département d'histoire" }, "faculte": { "codeSad": "03", "nom": "Faculté des arts et des sciences" }, "courrielInstitutionnel": "paul.hurtubise@umontreal.ca", "telephone": { "numero": "5143436111", "poste": "7654" }, "immeuble": "3744, rue Jean-Brillant", "local": "333-22", "exclusion": "0", "exclusionTel": "0" } ], "etablissementsAffilies": [], "visuelOfficiel": null, "courriels": [], "telephones": [], "expertise": { "secteursRecherche": [ { "uid": "10", "codeLangue": "fre", "nom": "Sciences sociales et humaines", "ordre": "0" }, { "uid": "10", "codeLangue": "eng", "nom": "Social Sciences and Humanities", "ordre": "0" } ], "disciplines": [ { "uid": "100", "codeLangue": "fre", "nom": "Histoire", "ordre": "0" }, { "uid": "100", "codeLangue": "eng", "nom": "History", "ordre": "0" } ], "motsCles": [ { "uid": "1101", "nom": "Jardins", "ordre": "3", "codeLangue": "fre", "departement": "École d'architecture de paysage", "departementCodeSAD": "0105", "faculte": null, "faculteCodeSAD": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "1101", "nom": "Gardens", "ordre": "3", "codeLangue": "eng", "departement": "École d'architecture de paysage", "departementCodeSAD": "0105", "faculte": null, "faculteCodeSAD": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, ... ], "pays": [], "continents": [], "periodesChronologiques": [], "phraseCle": [ { "codeLangue": "fre", "contenu": "Histoire de la Grèce antique" } ] }, "urlVitrine": [ { "nom": "Vitrine de la recherche", "url": "http://www.recherche.umontreal.ca/la-recherche-a-ludem/la-vitrine-des-professeurs/informations/chercheur/11111/" }, { "nom": "Répertoire des experts à l’intention des médias", "url": null } ], "recrutementRecherche": false },
Service de récupération de données par le biais d’un identifiant pérenne (idsadvr)
Service | Requête : URI | Requête : paramètres | Réponse |
---|---|---|---|
Informations sur un individu | /info/individu | idsadvr : IDSADVR (obligatoire, multiple) | (voir exemple de réponse pour détails) |
Informations sur une unité de recherche | /info/uniterech | idsadvr : IDSADVR (obligatoire, multiple ) | (voir exemple de réponse pour détails) |
Exemples de routes
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/info/individu?idsadvr=in15669
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/info/individu?idsadvr=in13593
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/info/uniterech?idsadvr[0]=ur13603&idsadvr[1]=ur13639&idsadvr[2]=ur13819&idsadvr[3]=ur13900&idsadvr[4]=ur13954
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/info/uniterech?idsadvr=ur13852
- https://www.recherche.umontreal.ca/vitrine/rest/api/1.8/umontreal/info/uniterech?idsadvr=ur13924
Réponses
Individu, bonne requête
Réponse avec bonne requête (200 : OK) pour info/individu. Les informations sont contenus dans l'élément data.
{ "data": [ { "idsadvr": "in12345", "prenom": "Claude", "nom": "Toupin", "sexe": "M", "institution": "Université de Montréal", "paysCode": "CA", "paysNom": "Canada", "consentement": { "departements": [], "facultes": [], "unitesRecherche": [], "UdeM": [ { "nom": "Vitrine de la recherche", "statutConsentement": "1" }, { "nom": "Répertoire des experts à l’intention des médias", "statutConsentement": "1" } ] }, "affichageWeb": [ { "departements": [], "facultes": [], "unitesRecherche": [], "UdeM": [ { "nom": "Vitrine de la recherche", "url": "http://www.recherche.umontreal.ca/la-recherche-a-ludem/la-vitrine-des-professeurs/informations/chercheur/12345/" }, { "nom": "Répertoire des experts à l’intention des médias", "url": "http://www.recherche.umontreal.ca/la-recherche-a-ludem/la-vitrine-des-professeurs/repertoire-des-experts-a-lintention-des-medias/informations/chercheur/12345/" } ] } ], "langues": [ { "nom": "Anglais", "medium": "Écrit" }, { "nom": "Français", "medium": "Écrit" }, { "nom": "Anglais", "medium": "Oral" }, { "nom": "Français", "medium": "Oral" }, { "nom": "Grec moderne (après 1453)", "medium": "Oral" } ], "courriels": [], "affiliations": [ { "fonction": { "codeSad": "42001", "nom": "Professeur titulaire" }, "uniteAdministrative": { "codeSad": "N202A0", "nom": "Faculté des arts et des sciences - Département d'histoire" }, "departement": { "codeSad": "0337", "nom": "Département d'histoire" }, "faculte": { "codeSad": "03", "nom": "Faculté des arts et des sciences" }, "courrielInstitutionnel": "claude.toupin@umontreal.ca", "telephone": { "numero": "5143436111", "poste": "5432" }, "immeuble": "Pavillon Lionel-Groulx", "local": "C6543-1", "exclusion": 0, "exclusionTel": 0 } ], "presenceWeb": [ { "idcategorie": "13", "categorie": "Page professionnelle (faculté,département,école)", "url": "http://histoire.umontreal.ca/repertoire-departement/toupin-claude/" }, { "idcategorie": "14", "categorie": "Site web de l’unité de recherche", "url": "http://abcd.umontreal.ca/" } ], "telephones": [ { "numero": "5143436111", "poste": "4321", "categorie": "Travail 1" }, { "numero": "5143431234", "poste": "", "categorie": "Télécopieur" } ], "etablissementsAffilies": [], "formations": [], "biographie": [ { "codeLangue": "fre", "contenu": "<p>Contenu de la biographie.</p>" } ], "recrutementRecherche": [], "activiteEnseignement": [ { "domainesEtude": [ { "id": "9", "codeLangue": "fre", "nom": "Sciences humaines" }, { "id": "9", "codeLangue": "eng", "nom": "Humanities" } ], "groupesProgramme": [ { "id": "148", "codeLangue": "fre", "nom": "Histoire" }, { "id": "57", "codeLangue": "fre", "nom": "Histoire et Études classiques" }, { "id": "148", "codeLangue": "eng", "nom": "History" }, { "id": "57", "codeLangue": "eng", "nom": "History and Classical Studies" } ], "programmes": [ { "noSad": "116510", "cycle": "1", "faculteNom": "Faculté des arts et des sciences", "faculteCodeSad": "03", "departementNom": "Département d'histoire", "departementCodeSad": "0337", "noms": [ { "codeLangue": "fre", "nom": "Baccalauréat en histoire" } ], "groupesProgramme": [ { "id": "148", "codeLangue": "eng", "nom": "History" }, { "id": "148", "codeLangue": "fre", "nom": "Histoire" } ], "domainesEtude": [ { "id": "9", "codeLangue": "eng", "nom": "Humanities" }, { "id": "9", "codeLangue": "fre", "nom": "Sciences humaines" } ] } ], "cours": [ { "noSad": "HGL1011", "trimestreCode": "H18", "annee": "18", "nom": "Initiation à l'archéologie grécoromaine", "cycle": "1", "sourceDonnees": "SAD", "faculteCodeSad": "03", "faculteNom": "Faculté des arts et des sciences", "programmes": [ { "noSad": "109510", "noms": [ { "codeLangue": "fre", "nom": "Baccalauréat en études classiques" } ] }, ... ] } ] } ] } ], "unitesRecherche": [], "projetsRecherche": [ { "categorie": "Projet de recherche au Canada", "nom": "Un projet de recherche", "dateDebut": "2015", "dateFin": "2019", "exclusion": "0", "selection": "0", "contenu": [], "pays": [], "continents": [], "periodesChronologiques": [], "financement": [ { "organisme": "CRSH/Conseil de recherches en sciences humaines du Canada", "programme": "Programme de subvention", "dateDebut": "2016-04-01", "dateFin": "2019-03-31" } ], "equipe": [ { "chercheurPrincipal": [ { "idsadvr": "in12345", "prenom": "Claude", "nom": "Toupin" } ], "coChercheur": [] } ] } ], "activitesRecherche": [ { "categorie": "Thèses et mémoires dirigés", "typeTransfert": null, "nom": "Titre d'une thèse", "dateDebut": "2016", "dateFin": "2016", "sourceFinancement": null, "exclusion": "0", "selection": "0", "sourceDonnees": "Papyrus", "contenu": [ { "codeLangue": "eng", "contenu": "<strong>Graduate :</strong> Tremblay, Sébastien<br/><strong>Cycle :</strong> Master's<br/><strong>Grade :</strong> M.A." }, { "codeLangue": "fre", "contenu": "<strong>Diplômé(e) :</strong> Tremblay, Sébastien<br/><strong>Cycle :</strong> Maîtrise <br/><strong>Diplôme obtenu :</strong> M.A." } ], "partenaires": [], "infosSupplementaires": [ { "categorie": null, "nom": "Lien vers le document dans Papyrus", "description": null, "adresse": "http://hdl.handle.net/1866/123456", "datePublication": null, "exclusion": "0", "selection": "0" } ] }, ... { "categorie": "Méthodes et formules pédagogiques", "typeTransfert": null, "nom": "Méthodes et formules pédagogiques", "dateDebut": null, "dateFin": null, "sourceFinancement": null, "exclusion": "0", "selection": "0", "sourceDonnees": null, "contenu": [ { "codeLangue": "fre", "contenu": "<p>Un exemple de contenu d'activité avec un <a href=\"http://www.umontreal.ca/" target=\"_blank\">lien</a></p>" } ], "partenaires": [], "infosSupplementaires": [] }, ... ], "publication": null, "communication": null, "expertise": [ { "secteursRecherche": [ { "uid": "10", "codeLangue": "fre", "nom": "Sciences sociales et humaines", "ordre": 1 }, { "uid": "10", "codeLangue": "eng", "nom": "Social Sciences and Humanities", "ordre": 1 }, { "uid": "18", "codeLangue": "fre", "nom": "Aménagement", "ordre": 2 }, { "uid": "18", "codeLangue": "eng", "nom": "Environmental Planning and Design", "ordre": 2 }, ... ], "disciplines": [ { "uid": "13", "codeLangue": "eng", "nom": "Classical Archaeology", "ordre": 1 }, { "uid": "13", "codeLangue": "fre", "nom": "Archéologie classique", "ordre": 1 }, ... ], "motsCles": [ { "uid": "3087", "ordre": 5, "codeLangue": "eng", "nom": "Ancient Greece", "departement": null, "departementCodeSad": null, "faculte": null, "faculteCodeSad": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "3087", "ordre": 5, "codeLangue": "fre", "nom": "Grèce ancienne", "departement": null, "departementCodeSad": null, "faculte": null, "faculteCodeSad": null, "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "624", "ordre": 6, "codeLangue": "fre", "nom": "Urbanisme", "departement": null, "departementCodeSad": null, "faculte": "Faculté de l'aménagement", "faculteCodeSad": "01", "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "624", "ordre": 6, "codeLangue": "eng", "nom": "City planning", "departement": null, "departementCodeSad": null, "faculte": "Faculté de l'aménagement", "faculteCodeSad": "01", "uniteRecherche": null, "uniteRechercheIdsadvr": null }, ... ], "pays": [ { "uid": "10214", "codeLangue": "eng", "nom": "Syrian Arab Republic", "ordre": 9 }, { "uid": "10214", "codeLangue": "fre", "nom": "Syrie (République arabe syrienne)", "ordre": 9 } ], "continents": [], "periodesChronologiques": [ { "uid": "5", "codeLangue": "eng", "nom": "Antiquity", "ordre": 7 }, { "uid": "5", "codeLangue": "fre", "nom": "Antiquité", "ordre": 7 } ], "phraseCle": [ { "codeLangue": "fre", "contenu": "Archéologie et histoire grecque" } ], "contenu": [ { "codeLangue": "fre", "contenu": "<p>Description de l'expertise.</p>" } ] } ], "expertiseMedia": [ { "typesMedias": [ { "typeMedia": "Presse écrite (imprimé, numérique)" }, { "typeMedia": "Radio" }, { "typeMedia": "Télévision" } ], "langues": [ { "nom": "Anglais", "medium": "Écrit" }, { "nom": "Français", "medium": "Écrit" }, { "nom": "Anglais", "medium": "Oral" }, { "nom": "Français", "medium": "Oral" }, { "nom": "Grec moderne (après 1453)", "medium": "Oral" } ], "disciplines": [ { "codeLangue": "eng", "nom": "Archaeology", "ordre": 4 }, { "codeLangue": "fre", "nom": "Archéologie", "ordre": 4 }, ... ], "motsCles": [ { "ordre": 1, "codeLangue": "eng", "nom": "Archeological Data Analysis", "departement": null, "departementCodeSad": null, "faculte": "Faculté des arts et des sciences", "faculteCodeSad": "03", "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "ordre": 1, "codeLangue": "fre", "nom": "Analyses des données archéologiques", "departement": null, "departementCodeSad": null, "faculte": "Faculté des arts et des sciences", "faculteCodeSad": "03", "uniteRecherche": null, "uniteRechercheIdsadvr": null }, ... ], "contenu": [ { "codeLangue": "fre", "contenu": "<p>Description de l'expertise</p>" } ], "infosSupplementaires": [] } ], "prix": [ { "vitrine": [], "autre": [] } ], "infosSupplementaires": [ { "categorie": null, "nom": "Découverte d'un nouveau site archéologique", "description": "Un nouveau site archéologique mis à l'étude en Syrie.", "adresse": "http://youtube.com/1234567890asdfghjkl", "datePublication": null, "exclusion": "0", "selection": "0", "sourceDonnees": null } ], "visuels": [ { "categorie": "Photo officielle", "nom": null, "droitAuteur": null, "ordre": null, "url": "http://www.recherche.umontreal.ca/visuel/personne:12345.photoOfficielle", "legendes": [] }, { "categorie": "Portrait du chercheur", "nom": "Mission archéologique", "droitAuteur": "© Claude Toupin", "ordre": null, "url": "http://www.recherche.umontreal.ca/visuel/personne:12345.portrait.1.image", "legendes": [ { "codeLangue": "fre", "contenu": "Photo montrant le site étudié" } ] } ], "activitesPromotion": [] } ] } "activitesPromotion": [] }]}
Service de moteur de recherche
Ce service permet d'effectuer des recherches dans le moteur SOLR de la Vitrine-Recherche par le biais de l'API. Les requêtes sont formulées avec l'API selon la syntaxe native de SOLR. Les résultats produits par SOLR sont interceptés par l'API REST qui les reformate selon une structure de données communes à l'API. Plus précisément, la recherche d'individus (professeurs et experts pour les média) produit une liste de format identique au service étendu de recherche d'identifiants pérennes (/idext/individu
) et le repérage des unités de recherche présente les résultats comme le service de recherche d'identifiants pérennes pour les unités de recherche (/id/uniterech
).
Trois « vitrines »
Présentement, le contenu de trois "vitrines" est repérable via l'API. Il s'agit de la "Vitrine des professeurs", la "Vitrine des unités de recherche" et le "Répertoire des experts à l'intention des médias". Plus tard s'ajouteront la "Vitrine des bâtisseurs" et celle des prix. Chaque vitrine fait l'objet d'une route propre en ce qui concerne le service de repérage.
Service | Route |
---|---|
Recherche dans la Vitrine des professeurs | /recherche/professeur/select |
Recherche dans la Vitrine des unités de recherche | /recherche/uniterech/select |
Recherche dans le Répertoire des experts à l'intention des médias | /recherche/expertmedia/select |
Syntaxe de requête de recherche SOLR
Dans le cadre du repérage dans la Vitrine-Recherche via l'API, une requête SOLR comporte habituellement 5 paramètres.
Paramètre | Usage | Exemples |
---|---|---|
q | Requête textuelle comme telle. Ce paramètre est obligatoire et permet de spécifier les termes et champs de recherche. Le nom d'un champ est suivi du caractère ": ". On utilise les guillemets ASCII pour délimiter une experssion exacte. Les espaces sont remplacés par des "+". | q=ID:* (repérer tous les objets) q=Texte:Intelligence+artificielle+AND+Faculte_fac:"Faculté+de+droit" |
sort +asc/+desc | Préciser le tri des résultats. Par défaut, le tri s'effectue selon la pertinence telle qu'évaluée par SOLR. On utilise ce paramètre pour choisir un champ de tri particulier. On précise la direction du tri avec Ce paramètre n'est présentement pas fonctionnel du côté de l'API : le tri effectué par SOLR est perdu lors du formatage des résultats du côté de l'API. | sort= |
start / rows | Les résultats de SOLR sont paginés. Le paramètre start désigne la position du pointeur au début de la page. Quant à rows , il indique le nombre de résultats par page. |
|
q.op | Pour préciser l'opérateur booléen s'appliquant entre les mots spécifiés dans la requête q. En l'absence de ce paramètret, c'est le ET (AND) qui s'applique. | q.op=AND&q=Texte:intelligence+artificielle (on cherche "intelligence" ET "artificielle")q.op=OR&q=Texte:intelligence+cognition (on cherche "intelligence" OU "cognition") |
Exemple d'une requête complète correspondant à la recherche simple dans l'interface de la Vitrine-Recherche illustrée ci-dessous.
q.op=OR&q=Texte%3Aintelligence+cognition&sort=UniteAdmin_tri+asc
Exemple d'une requête complète correspondant à la recherche par critère illustrée ci-dessous, si l'on voulait obtenir la deuxième page de résultats, avec 10 résultats par page.
q=Faculte_fac%3A"Faculté+de+droit"+AND+Expertise_idx%3A"Droit+civil"&sort=ChercheurNP_tri+asc&start=10&rows=10
Quelques particularités
- Dans les URL de requêtes faites à l'API, le caractère "
:
" à la suite d'un nom de champ peut être remplacé par "%3A". Les espaces sont quant à eux remplacés par "+". - La question des apostrophes : que ce soit à la saisie dans l'interface de recherche ou lors de l'indexation des données dans SOLR, les apostrophes peuvent se présenter sous la forme courbe ou la forme droite. Cela peut causer des problème de repérage lorsque ce qui est saisie et ce qui est indexé ne concordent pas. Pour la Vitrine, nous contôlons cette problématique en remplaçant les apostrophes courbes par des apostrophes droites, tant à l'indexation qu'à la saisie dans l'interface Web.
- Les opérateurs booléens AND, OR ou NOT doivent être en majuscules.
Critères et tri
Professeurs
Type | Champ SOLR | Libellé / fonction |
---|---|---|
Critère, par mots | Texte | Pour la recherche simple (tous les champs) |
Critère, par expression exacte | Secteur_fac | Secteur de recherche |
Critère, par expression exacte | Discipline_fac | Discipline |
Critère, par expression exacte | ObjetsRech_fac | Expertise par mot-clé |
Critère, par expression exacte | Faculte_fac | Faculté |
Critère, par expression exacte | UniteRech_fac | Unité de recherche |
Critère, par expression exacte | ChercheurNP_fac | Nom du professeur |
Tri |
| Nom |
Tri | Expertise_tri | Expertise |
Tri | UniteAdmin_tri | Faculté d'attache |
Critère. booléen |
| Repérer les personnes qui affichent une notification de recrutement (valeur "true") |
Unités de recherche
Type | Champ SOLR | Libellé / fonction |
---|---|---|
Critère, par mots | Texte | Pour la recherche simple (tous les champs) : n'est pas utilisé actuellement |
Critère, par expression exacte | Secteur_fac | Secteur de recherche |
Critère, par expression exacte |
| Faculté |
Critère, par expression exacte |
| Établissement affilié à l'UdeM |
Critère, par mots |
| Activité de recherche |
Critère, par expression exacte |
| Responsable |
Critère, par expression exacte |
| Catégorie d'unité de recherche |
Critère, par expression exacte | UniteRech_fac | Nom de l'unité de recherche |
Tri |
| Nom |
Tri |
| Responsable |
Tri |
| Secteur de recherche |
Experts
Type | Champ SOLR | Libellé / fonction |
---|---|---|
Critère, par mots | Texte | Pour la recherche simple et option "tous les champs" de la recherche par critère |
Critère, par expression exacte | Discipline_fac | Discipline |
Critère, par expression exacte | ObjetsRech_fac | Expertise par mot-clé |
Critère, par expression exacte |
| Langue (oral) |
Critère, par expression exacte |
| Langue (écrite) |
Critère, par expression exacte |
| Média privilégié |
Critère, par expression exacte | ChercheurNP_fac | Nom de l'expert |
Tri |
| Nom |
Tri | Expertise_tri | Expertise |
Tri | UniteAdmin_tri | Faculté d'attache |
Réponse
La réponse retournée par l'API REST du SADVR contient deux blocs. Le premier contient les informations relatifs à la pagination des résultats (paginationSOLR
) et le second (data
) contient la liste des résultats.
{ "paginationSOLR": { "numFound": 73, "start": 10, "rows": 10 }, "data": [ ... ] }
L'élément numFound
est le nombre total d'items trouvés. Les éléments start
et rows
retournent les valeurs de ces paramètres initialement soumis à SOLR lors de la requête. Ces informations sont nécessaires pour permettre à l'application de générer les liens permettant d'atteindre d'autres pages de résultats que celle affichée.
Repérage d'individus : professeurs et experts
Le format de la liste des résultats est le même que celui du service de recherche d’identifiant pérenne étendu pour les individus (/idext/individu
).
{ "paginationSOLR": { "numFound": 73, "start": 10, "rows": 10 }, "data": [ ... { "idsadvr": "in20664", "prenom": "Christine", "nom": "Gagnon", "affiliations": [ { "fonction": { "codeSad": "42032", "nom": "Professeure associée" }, "uniteAdministrative": { "codeSad": "C000A0", "nom": "Faculté de droit" }, "departement": { "codeSad": null, "nom": null }, "faculte": { "codeSad": "11", "nom": "Faculté de droit" }, "courrielInstitutionnel": "christine.gagnon.3@umontreal.ca", "telephone": { "numero": null, "poste": null }, "immeuble": null, "local": null, "exclusion": "0", "exclusionTel": "0" } ], "etablissementsAffilies": [], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/personne:20664.photoOfficiellePetite", "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/personne:20664.photoOfficielle", "courriels": [], "telephones": [], "expertise": { "secteursRecherche": [ { "codeLangue": "fre", "nom": "Sciences sociales et humaines", "ordre": "1" }, { "codeLangue": "fre", "nom": "Droit", "ordre": "2" }, { "codeLangue": "eng", "nom": "Social Sciences and Humanities", "ordre": "1" }, { "codeLangue": "eng", "nom": "Law", "ordre": "2" } ], "disciplines": [ { "codeLangue": "fre", "nom": "Droit", "ordre": "1" }, { "codeLangue": "eng", "nom": "Law", "ordre": "1" } ], "motsCles": [ { "uid": "372", "nom": "Droit notarial", "ordre": "1", "codeLangue": "fre", "departement": null, "departementCodeSAD": null, "faculte": "Faculté de droit", "faculteCodeSAD": "11", "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "372", "nom": "Notarial law", "ordre": "1", "codeLangue": "eng", "departement": null, "departementCodeSAD": null, "faculte": "Faculté de droit", "faculteCodeSAD": "11", "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "1372", "nom": "Immobilier", "ordre": "2", "codeLangue": "fre", "departement": null, "departementCodeSAD": null, "faculte": "Faculté de droit", "faculteCodeSAD": "11", "uniteRecherche": null, "uniteRechercheIdsadvr": null }, { "uid": "1372", "nom": "Real estate", "ordre": "2", "codeLangue": "eng", "departement": null, "departementCodeSAD": null, "faculte": "Faculté de droit", "faculteCodeSAD": "11", "uniteRecherche": null, "uniteRechercheIdsadvr": null } ], "pays": [], "continents": [], "periodesChronologiques": [], "phraseCle": [ { "codeLangue": "eng", "contenu": "Co-ownership law" }, { "codeLangue": "fre", "contenu": "Droit de la copropriété" } ] }, "urlVitrine": [ { "nom": "Vitrine de la recherche", "url": "http://www.recherche.umontreal.ca/la-recherche-a-ludem/la-vitrine-des-professeurs/informations/chercheur/7085/" }, { "nom": "Répertoire des experts à l’intention des médias", "url": null } ], "recrutementRecherche": false }, ... ] }
Repérage d'unités de recherche
Dans le cas des unités de recherche, la liste des résultats se présente de façon identique au service de recherche d’identifiant pérenne pour les unités (/id/uniterech
).
{ "paginationSOLR": { "numFound": 36, "start": 0, "rows": 20 }, "data": [ { "idsadvr": "ur13611", "nom": "Centre d'études ethniques des universités montréalaises", "acronyme": "CEETUM", "responsables": [ { "idsadvr": "in13629", "prenom": "Deirdre", "nom": "Meintel", "fonction": "Professeure titulaire", "fonctionCodeSAD": "42001", "uniteAdmin": "Faculté des arts et des sciences - Département d'anthropologie", "courriel": "deirdre.meintel@umontreal.ca" } ], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/uniterech:13611.photoOfficiellePetite" "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/uniterech:13611.photoOfficielle", }, { "idsadvr": "ur13614", "nom": "Centre de recherche en droit public", "acronyme": "CRDP", "responsables": [ { "idsadvr": "in14999", "prenom": "Vincent", "nom": "Gautrais", "fonction": "Professeur titulaire", "fonctionCodeSAD": "42001", "uniteAdmin": "Faculté de droit", "courriel": "vincent.gautrais@umontreal.ca" } ], "visuelOfficiel": "http://www.recherche.umontreal.ca/visuel/uniterech:13614.photoOfficiellePetite" "visuelOfficielGrand": "http://www.recherche.umontreal.ca/visuel/uniterech:13614.photoOfficielle" }, ... ] }
Exemples de code d'utilisation
Récupération des données d'une route (code PHP)
Voici un exemple de code PHP qui récupère les informations de base de tous les individus de l'unité de recherche n° 89, et qui les affiche à l'écran.
$params = [ 'uniterech' => 89, ]; $paramString = http_build_query($params); $route = ' https://www.recherche.umontreal.ca/vitrine/rest/api/1.6/umontreal/info/individu?'; $apiUri = $route . $paramString; $response = file_get_contents($apiUri); $json = json_decode($response); /*** Regarder s'il y a des erreurs dans la réponse ***/ if (isset($json->errors)) { //Traiter l'erreur } /*** La réponse est OK. Prendre les données ***/ $data = $json->data; foreach ($data as $chercheur) { echo "ID : " . $chercheur->id . "\n"; echo "Prénom : " . $chercheur->prenom . "\n"; echo "Nom de famille : " . $chercheur->nom . "\n"; echo "Courriel : " . $chercheur->courriel . "\n"; echo "Titre : " . $chercheur->titreFonction . "\n"; echo "Unité : " . $chercheur->uniteAdmin . "\n"; echo "\n"; }
Le résultat est le suivant.
ID : 1 Prénom : Jurgen Nom de famille : Sygusch Courriel : jurgen.sygusch@umontreal.ca Titre : Professeur titulaire Unité : Faculté de médecine - Département de biochimie & médecine moléculaire ID : 49 Prénom : Jean-Yves Nom de famille : Lapointe Courriel : jean-yves.lapointe@umontreal.ca Titre : Professeur titulaire Unité : Faculté des arts et des sciences - Département de physique
Les paramètres mis dans $params correspondent aux paramètres du tableau pour chaque requête. Ils peuvent être simples ou en tableau. Les paramètres peuvent être combinés.
Par exemple :
$params = [ 'uniterech' => [89, 3, 5], 'faculte' => ['01', '18'], 'departement' => '0101', 'fonction' => '01402' ];
va chercher les membres faisant partie
- de l'une des unités de recherche ayant les ID 89, 3 ou 5
ET - de l'une des facultés ayant le code SAD 01 ou 18
ET - du département de code SAD 0101
ET - ayant la fonction de code SAD 01402.
Si l'un des membres n'a pas une information (par exemple, il n'est pas affilié à une unité de recherche), l'attribut est affecté à null.
Récupération des données d'une route (code JavaScript/jQuery)
Voici un exemple de code jQuery qui capte chaque entrée des individus dans des variables, ou qui affiche dans la console les erreurs de la requête.
N'oubliez pas d'inclure une version récente de jQuery dans votre page pour que ce code fonctionne.
var params = { 'uniterech': 1, 'fonction': ['42001', '42007'] }; $.get('/vitrine/rest/api/1.6/id/individu', params) .done( function(data) { data.data.forEach(function(item) { id = item.id; nom = item.nom; prenom = item.prenom; adresseCourriel = item.courriel; titre = item.titreFonction; uniteAdmin = item.uniteAdmin; //Faire des opérations avec les données }); }) .fail( function (xhr, textStatus, error) { var errors = xhr.responseJSON.errors; if ('uniterech' in errors) { console.log('Erreur dans arguments de "uniterech" : ' + errors['uniterech']); } else if ('faculte' in errors) { console.log('Erreur dans arguments de "faculte" : ' + errors['faculte']); } else if ('departement' in errors) { console.log('Erreur dans arguments de "departement" : ' + errors['departement']); } else if ('fonction' in errors) { console.log('Erreur dans arguments de "fonction" : ' + errors['fonction']); } else { console.log('Erreur interne du serveur : '. errors); } });
Tests
Pour exécuter les tests inclus dans l'application (et vérifier que tout fonctionne), allez au Terminal, naviguez vers le répertoire racine de l'application et tapez la ligne suivante.
php vendor/bin/codecept run
Ressources supplémentaires
Lecture du format JSON dans un navigateur
Il existe plusieurs extensions de navigateur Web qui permettent de mettre en forme la réponse JSON lors de l'affichage dans un navigateur. Cela en facilite la consultation. On retient en particulier JSON Lite pour Firefox (https://addons.mozilla.org/fr/firefox/addon/json-lite/), Chrome (https://chrome.google.com/webstore/detail/json-lite/) et Opera (https://addons.opera.com/fr/extensions/details/json-lite/).
Paquets (Packages)
Les paquets installés pour tous les environnements sont :
laravel/framework
league/fractal
Ceux utilisés pour le développement seulement sont :
- phpunit/phpunit
- phpspec/phpspec
- mockery/mockery
codeception/codeception
La liste de courriels et le blog pour chaque paquet (notamment pour les failles de sécurité) :
laravel/framework : https://laravel-news.com (s'ajouter à la liste courriel à partir du site)
league/fractal : https://github.com/thephpleague/fractal/issues?q=is%3Aopen+is%3Aissue
UniteRech_fac