Vous regardez une version antérieure (v. /pages/viewpage.action?pageId=294781211) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 11) afficher la version suivante »

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.

ServiceRequête : URIRequête : paramètres

Réponse : champs pour chaque élément

Code SAD de toutes les facultésressource/faculte

uniterech : identifiant de l'unité de recherche (optionnel, multiple)

  • codeSad
  • nom
Code SAD de tous les départementsressource/departementuniterech : identifiant de l'unité de recherche (optionnel, multiple)
  • codeSad
  • nom
Code SAD de toutes les unités administrativesressource/uniteadmin---
  • codeSad
  • nom
Code SAD de tous les titres de fonctionressource/fonction---
  • codeSad
  • nomM
  • nomF
Numéro SAD de tous les programmesressource/programme---
  • noSad
  • nom
Identifiant de tous les domaines d'étudesressource/domaineetude---
  • id
  • nom
Nom de tous les champs d'expertise de rechercheressource/expertiserech

departement : code SAD de département (optionnel, multiple)

faculte : code SAD de faculté (optionnel, simple)

(avertissement) au moins l'un de ces deux paramètres est requis.

fonction : code SAD de fonction (optionnel, multiple)

  • nom
  • volet
  • nomTraduction
    • codeLangue
    • nom
  • nbIndividus (sauf mots-clés)

(ci-dessous mots-clés seulement)

  • departement
    • departementCodeSad
    • departementNom
    • nbIndividus
  • faculte
    • faculteCodeSad
    • faculteNom
    • nbIndividus


Nom des secteurs de rechercheressource/secteurrech---
  • id
  • noms
    • codeLangue
    • nom
Disciplinesressource/discipline---
  • id
  • noms
    • codeLangue
    • nom
Nom des établissements affiliés à l'UdeMressource/etablaffilie---
  • nom
Code et nom des langues parlées et écritesressource/langue---
  • id
  • code
  • oral (true|false)
  • ecrit (true|false)
  • noms
    • codeLangue
    • nom
Code et nom des types d'unités de rechercheressource/typeuniterech---
  • id
  • noms
    • codeLangue
    • nom

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

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)

ServiceRequête : URIRequête : paramètres

Réponse : champs pour chaque élément

Identifiants pérennes de tous les individus/id/individu

uniterech : IDSADVR de unité de recherche (optionnel, multiple)

faculte : code SAD de faculté (optionnel, multiple)

departement : code SAD de département (optionnel, multiple)

uniteadmin : code SAD de l'unité administrative (optionnel, multiple)

fonction : code SAD de fonction (optionnel, multiple)

programme : code SAD de programme (optionnel, multiple)

domaineEtude : ID du domaine d'étude (optionnel, multiple)

expertiseRech : nom de l'expertise de recherche (optionnel, multiple)

recrutement : valeur « true » (optionnel)

  • idsadvr
  • prenom
  • nom
  • titreFonction
  • uniteAdmin
  • courriel
  • etablissementsAffilies
  • visuelOfficiel
  • visuelOfficielGrand


Identifiants pérennes des unités de recherche/id/uniterech

faculte : code SAD de faculté (optionnel, multiple)

departement : code SAD de département (optionnel, multiple)

typeuniterech : identifiant (optionnel, multiple)

  • idsavr
  • nom
  • acronyme
  • responsable
    • id
    • nom
    • prenom
    • courriel
    • fonction
    • fonctionCodeSAD
    • uniteAdmin
    • fonctionResp
  • visuelOfficiel
  • visuelOfficielGrand
  • unitesRattachement

    • departements
    • facultes
  • expertise
    • secteursRecherche
    • disciplines
    • motsCles
    • pays
    • continents
    • periodesChronologiques

Exemples de routes

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

ServiceRequête : URIRequête : paramètres

Réponse

Identifiants pérennes de tous les individus/idext/individu

uniterech : IDSADVR de unité de recherche (optionnel, multiple)

faculte : code SAD de faculté (optionnel, multiple)

departement : code SAD de département (optionnel, multiple)

uniteadmin : code SAD de l'unité administrative (optionnel, multiple)

fonction : code SAD de fonction (optionnel, multiple)

programme : code SAD de programme (optionnel, multiple)

domaineEtude : ID du domaine d'étude (optionnel, multiple)

expertiseRech : nom de l'expertise de recherche (optionnel, multiple)

recrutement : valeur « true » (optionnel)

Note : Il est recommandé de spécifier au moins paramètre afin éviter d'obtenir
un temps de réponse trop long.

  • idsadvr
  • prenom
  • nom
  • affiliations
  • courriels
  • téléphones
  • etablissementsAffilies
  • visuelOfficiel
  • visuelOfficielGrand
  • expertise
  • urlVitrine
  • recrutementRecherche

(ci-dessus, premier niveau seulement; voir exemple de réponse pour détails)


Exemples de routes

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) 

ServiceRequête : URIRequête : paramètres

Réponse

Informations sur un individu/info/individuidsadvr : IDSADVR (obligatoire, multiple)(voir exemple de réponse pour détails)
Informations sur une unité de recherche/info/uniterechidsadvr : IDSADVR (obligatoire, multiple )(voir exemple de réponse pour détails)

Exemples de routes

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.

ServiceRoute
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ètreUsageExemples
qRequê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 asc ou desc.

(avertissement) 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=ChercheurNP_tri+asc (trier par nom de professeur, de A à Z)
start / rowsLes 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.

start=0&rows=10 (les 10 premiers résultats)
start=10&rows=10 (les 10 résultats de la deuxième page)
start=20&rows=10 (les 10 résultats de la troisième page)

q.opPour 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

TypeChamp SOLRLibellé / fonction
Critère, par motsTextePour la recherche simple (tous les champs)
Critère, par expression exacteSecteur_facSecteur de recherche
Critère, par expression exacteDiscipline_facDiscipline
Critère, par expression exacteObjetsRech_facExpertise par mot-clé
Critère, par expression exacteFaculte_facFaculté
Critère, par expression exacteUniteRech_facUnité de recherche
Critère, par expression exacteChercheurNP_facNom du professeur
Tri

ChercheurNP_tri

Nom
TriExpertise_triExpertise
TriUniteAdmin_triFaculté d'attache
Critère. booléen
Recrutement
Repérer les personnes qui affichent une notification de recrutement (valeur "true")

Unités de recherche

TypeChamp SOLRLibellé / fonction
Critère, par motsTextePour la recherche simple (tous les champs) : n'est pas utilisé actuellement
Critère, par expression exacteSecteur_facSecteur de recherche
Critère, par expression exacte
UniteAdmin_fac
Faculté
Critère, par expression exacte
EtablAffil_fac
Établissement affilié à l'UdeM
Critère, par mots
ActiviteRech_idx
Activité de recherche
Critère, par expression exacte
ChercheurNP_fac
Responsable
Critère, par expression exacte
TypeUniteRech_fac
Catégorie d'unité de recherche
Critère, par expression exacteUniteRech_facNom de l'unité de recherche
Tri
UniteRech_tri
Nom
Tri
ChercheurNP_tri
Responsable
Tri
Secteur_tri
Secteur de recherche

Experts

TypeChamp SOLRLibellé / fonction
Critère, par motsTextePour la recherche simple et option "tous les champs" de la recherche par critère
Critère, par expression exacteDiscipline_facDiscipline
Critère, par expression exacteObjetsRech_facExpertise par mot-clé
Critère, par expression exacteLangueEcrite_facLangue (oral)
Critère, par expression exacteLangueParlee_facLangue (écrite)
Critère, par expression exacte
Media_fac
Média privilégié
Critère, par expression exacteChercheurNP_facNom de l'expert
Tri

ChercheurNP_tri

Nom
TriExpertise_triExpertise
TriUniteAdmin_triFaculté 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).

Exemple de route : https://www.recherche.umontreal.ca/vitrine/rest/public/api/1.8/umontreal/recherche/professeur/select?q=Faculte_fac%3A"Faculté+de+droit"&sort=ChercheurNP_tri+asc&start=10&rows=10

{
  "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).

Exemple de route : https://www.recherche.umontreal.ca/vitrine/rest/public/api/1.8/umontreal/recherche/uniterech/select?q=TypeUniteRech_fac:"Centre+institutionnel"&start=0&rows=20&sort=UniteRech_tri+asc


{
  "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é) :


UniteRech_fac

ettbaffilie

  • Aucune étiquette