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