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.

A travers cette documentation, vous serez guidés dans le processus de mise en place d’un serveur GraphQL aves Tomcat et sans Spring Boot.

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

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"
                }
            }
        ]
    }
}