Ressources numériques en sciences humaines et sociales OpenEdition Nos plateformes OpenEdition Books OpenEdition Journals Hypothèses Calenda Bibliothèques OpenEdition Freemium Suivez-nous

Notice GraphQL

 

GraphQl API Documentation

Ici suivront des exemples d’utilisation de requêtes à l’API GraphQL.

1. Introduction

GraphQL est un langage de requête pour les API dont les requêtes comportent un schéma à respecter pour le retour. De cette manière, le client peut demander précisément les données dont il a besoin sans plus.

Pour l’instant, 9 schémas de données sont implémentés:

  • NodeFullConcept
  • SearchResults
  • ConceptCustomRelation
  • ConceptIdLabel
  • ConceptImage
  • ResourceGPS
  • ConceptNote
  • ConceptRelation
  • ConceptLabel

Les 2 principaux sont NodeFullConcept et SearchResults. Les autres types ne peuvent pas être requêtés car ils servent à NodeFullConcept.

Le type SearchResults est en fait une fonction qui permet de rechercher un terme à partir de la langue, et l’id d’un thésaurus et nous retourne une liste de concepts.

L’objectif avec GraphQL est de pouvoir manipuler les données lors de la requête pour récupérer uniquement ce dont on a besoin.

NodeFullConcept

Requête sur l’entité complète :

query {
  fullConcept(idTheso: "th2", idConcept: "169", idLang: "fr") {
    uri
    resourceType
    identifier
    permanentId
    notation
    resourceStatus
    created
    modified
    creatorName
    contributorName
    prefLabel {
      idTerm
      id
      label
      idLang
      codeFlag
    }
    altLabels {
      idTerm
      id
      label
      idLang
      codeFlag
    }
    hiddenLabels {
      idTerm
      id
      label
      idLang
      codeFlag
    }
    prefLabelsTraduction {
      idTerm
      id
      label
      idLang
      codeFlag
    }
    altLabelTraduction {
      idTerm
      id
      label
      idLang
      codeFlag
    }
    hiddenLabelTraduction {
      idTerm
      id
      label
      idLang
      codeFlag
    }
    narrowers {
      Uri
      label
      idConcept
      role
      status
    }
    broaders {
      Uri
      label
      idConcept
      role
      status
    }
    relateds {
      Uri
      label
      idConcept
      role
      status
    }
    notes {
      idNote
      idLang
      label
    }
    definitions {
      idNote
      idLang
      label
    }
    examples {
      idNote
      idLang
      label
    }
    editorialNotes {
      idNote
      idLang
      label
    }
    changeNotes {
      idNote
      idLang
      label
    }
    scopeNotes {
      idNote
      idLang
      label
    }
    historyNotes {
      idNote
      idLang
      label
    }
    exactMatchs
    closeMatchs
    broadMatchs
    relatedMatchs
    narrowMatchs
    gps {
      latitude
      longitude
      position
    }
    images {
      id
      imageName
      copyRight
      uri
    }
    membres {
      uri
      identifier
      label
    }
    replacedBy {
      uri
      identifier
      label
    }
    replaces {
      uri
      identifier
      label
    }
    facets {
      uri
      identifier
      label
    }
    nodeCustomRelations {
      targetConcept
      targetLabel
      relation
    }
  }
}

Cette requête permets de récupérer tout un concept et l’ensemble de ses attributs. C’est assez fastidieux de faire une requête sur un concept complet. On va donc récupérer l’uri, l’identifiant et le prefLabel d’un concept avec la requête suivante :

query {
  fullConcept(idTheso: "th2", idConcept: "169", idLang: "fr") {
    uri
    identifier
    prefLabel {
      idTerm
      id
      label
      idLang
      codeFlag
    }
}
}

De cette manière, on récupère l’objet suivant :

{
    "data": {
        "fullConcept": {
            "uri": "http://mondomaine.fr//?idc=169&idt=th2",
            "identifier": "169",
            "prefLabel": {
                "idTerm": "test",
                "id": 0,
                "label": "92"
            }
        }
    }
}

SearchConcepts

Requête sur l’entité complète :

query {
  searchConcepts(value: "en", idLang: "fr", idGroups: [], idTheso: "th3"){
      uri
      resourceType
      identifier
      permanentId
      notation
      resourceStatus
      created
      modified
      creatorName
      contributorName
      prefLabel {
        idTerm
        id
        label
        idLang
        codeFlag
      }
      altLabels {
        idTerm
        id
        label
        idLang
        codeFlag
      }
      hiddenLabels {
        idTerm
        id
        label
        idLang
        codeFlag
      }
      prefLabelsTraduction {
        idTerm
        id
        label
        idLang
        codeFlag
      }
      altLabelTraduction {
        idTerm
        id
        label
        idLang
        codeFlag
      }
      hiddenLabelTraduction {
        idTerm
        id
        label
        idLang
        codeFlag
      }
      narrowers {
        Uri
        label
        idConcept
        role
        status
      }
      broaders {
        Uri
        label
        idConcept
        role
        status
      }
      relateds {
        Uri
        label
        idConcept
        role
        status
      }
      notes {
        idNote
        idLang
        label
      }
      definitions {
        idNote
        idLang
        label
      }
      examples {
        idNote
        idLang
        label
      }
      editorialNotes {
        idNote
        idLang
        label
      }
      changeNotes {
        idNote
        idLang
        label
      }
      scopeNotes {
        idNote
        idLang
        label
      }
      historyNotes {
        idNote
        idLang
        label
      }
      exactMatchs
      closeMatchs
      broadMatchs
      relatedMatchs
      narrowMatchs
      gps {
        latitude
        longitude
        position
      }
      images {
        id
        imageName
        copyRight
        uri
      }
      membres {
        uri
        identifier
        label
      }
      replacedBy {
        uri
        identifier
        label
      }
      replaces {
        uri
        identifier
        label
      }
      facets {
        uri
        identifier
        label
      }
      nodeCustomRelations {
        targetConcept
        targetLabel
        relation
      }
    }
  }

Une requête typique serait de cette forme :

query {
  searchConcepts(value: "Adriatic ampho", idLang: "en", idGroups: [], idTheso: "th3") {
    uri
    identifier
    prefLabel {
      idTerm
      id
      label
      idLang
      codeFlag
    }
}
}

On aurait une réponse de ce type :

{
    "data": {
        "searchConcepts": [
            {
                "uri": "https://ark.frantiq.fr/ark:/26678/pcrtrjtm2djdmq3dzpqk0nbz/?idc=264929&idt=th3",
                "identifier": "264929",
                "prefLabel": {
                    "idTerm": "Adriatic amphora",
                    "id": 0,
                    "label": "52642"
                }
            }
        ]
    }
}

 


OpenEdition vous propose de citer ce billet de la manière suivante :
tomcourtet (15 juillet 2024). Notice GraphQL. Opentheso. Consulté le 15 novembre 2025 à l’adresse https://doi.org/10.58079/120lf


Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

This site uses Akismet to reduce spam. Learn how your comment data is processed.