ipnoos

Version : 1.0

Contact : david@soulayrol.name

Chemin : /ipnoos/v1

Licence : CC-BY-NC-SA-4.0

Sommaire


Description

ipnoos est une Interface Publique de nooSFere. Il s'agit d'une interface d'inspiration REST.

Choix de conception

Une large partie de l'interface expose le contenu de la base de données comme un ensemble de collections ; par exemple les auteurs, les livres, les éditeurs ou encore les adhérents ou les événements recensés sur le site. Ces collections sont toutes présentées présentées de manière homogène. Elles sont paginées, il est possible de les restreindre par différents critères de recherche ou d'en choisir l'ordre de tri. De même, consulter un élément en particulier, le modifier ou en ajouter un nouveau se fait d'une manière similaire d'une collection à l'autre, tant que les opérations ont un sens et sont permises pour l'utilisateur connecté. Au delà de cette base commune, l'interface fournit des fonctions supplémentaires et spécifiques pour, par exemple, extraire des statistiques ou réaliser de manière optimisée une opération particulière.

Les chemins, les paramètres d'URL, les noms et les clefs des entités sont écrits en anglais pour sa concision (en général) et parce que le jeu de caractères nécessaire tient dans l'encodage ASCII, lequel nécessite moins d'attention, dans l'usage des URL en particulier. Toute la documentation, ainsi que les données transitant par l'interface, sont en revanche en français et encodées en UTF-8.

ipnoos utilise autant que possible les entêtes HTTP standards selon l'usage qui est normalisé. Lorsque des informations supplémentaires sont utiles, des entêtes spécifiques sont utilisés en suivant pour cela les recommandations fournies sur cette page.

Parce que l'interface permet des traitements automatisés et l'exploration systématique de la base de données, son utilisation est soumise à une authentification, et donc réservée aux adhérents de l'association.

Authentification

TODO

Utilisation des collections

En accord avec l'architecture REST, les données présentées sous forme de collections se manipulent à l'aide des méthodes (ou verbes) HTTP ; GET, POST, PUT, etc. Chacun de ces verbes s'accompagne d'une sémantique propre (par exemple, lire une donnée, ou modifier une donnée).

Quelle que soit la collection visitée, les opérations décrites ci-après sont stables. La collection visitée est représentée par le terme générique COLLECTION. Il est indiqué les exceptions ou les compléments qui peuvent êtres rencontrés. La documentation complète de chacune de ces opérations se trouve dans la section Méthodes.

Il est à noter que l'ajout ou la modification d'éléments nécessite le plus souvent des droits particuliers. Par ailleurs, la suppression d'un élément est une opération très rare, voire dangereuse sur certaines collections. Elle peut donc être soumise à des contrôles spécifiques, voire ne pas être implémentée du tout.

Lister les éléments

La consultation d'une collection entière est l'opération la plus complète en terme d'options. Elle est réalisée avec la méthode GET sur le chemin racine de la collection visitée.

Toutes les réponses sur une collection entière sont paginées. Les parcourir se fait donc en sélectionnant un numéro de page et une taille de page, puis en envoyant d'autres requêtes pour obtenir la page précédente ou la page suivante si nécessaire.

Dans les exemple ci-dessous, il est d'abord demandé la première page de la collection, avec sa taille par défaut, puis la page 42, puis la première page mais avec une taille de page différente. Enfin, le dernier exmple démontre la possibilité de combiner les deux paramètres.

GET /ipnoos/v1/COLLECTION
GET /ipnoos/v1/COLLECTION?page=42
GET /ipnoos/v1/COLLECTION?size=50
GET /ipnoos/v1/COLLECTION?page=2&size=25

Il est également possible d'utiliser des filtres et choisir l'ordre de tri.

GET /ipnoos/v1/COLLECTION[?[filter[&filter]][sort]]

Consulter un élément

Tous les éléments de collection possèdent un identifiant unique sur la collection. Il est donc possible de demander un élément en spécifiant cet identifiant.

GET /ipnoos/v1/COLLECTION/by-id/ID

Selon la collection, un élément peut posséder un autre identifiant ou groupe de propriétés, unique. L'interface peut alors proposer le moyen d'obtenir un élément selon ces critères. Par exemple, l'adresse de courriel est unique pour chaque adhérent. Aussi, la collection des membres de l'association permet-elle d'obtenir la fiche d'un adhérent par son adresse.

GET /ipnoos/v1/members/by-email/EMAIL

La liste des membres procure d'ailleurs aussi un raccourci pour accéder à la fiche de l'adhérent connecté.

GET /ipnoos/v1/members/self

Ajouter un élément

Pour créer un élément, il faut employer la méthode POST sur cette collection. La création se fait en employant le même format que l'objet JSON obtenu à la consultation. La création nécessite seulement un sous-ensemble de l'ensemble des propriétés disponibles pour l'éléments. L'identifiant unique en particulier n'est jamais requis ; il est choisi par le serveur.

POST /ipnoos/v1/COLLECTION

Modifier un élément

PUT /ipnoos/v1/COLLECTION/by-id/ID

Supprimer un élément

DELETE /ipnoos/v1/COLLECTION/by-id/ID

Modèle de données

Le format utilisé pour les échanges est JSON.

Réponses

Ipnoos-Collection

La valeur de cet entête est une succession de quatre champs qui renseignent sur le format et la taille de la collection visitée. Il est présent sur toutes les réponses paginées.

Exemple :

Ipnoos-Collection: page-index=1; page-size=10; total-pages=3; total-elements=23

Link

Les URL permettant de naviguer rapidement à l'intérieur de la collection. Son contenu est une liste d'URLs tel que définit dans la RFC 8288.

Dans chaque réponse, l'entête comporte le lien qualifié canonical qui fournit l'URL de référence associée au contenu obtenu. Dans le cas d'une réponse paginée, l'entête comporte également les liens first et next qui représentent respectivement l'URL canonique de la page, le lien vers la première et la dernière page de la collection. Selon la page retournée dans la réponse et la taille de la collection, les liens prev et next peuvent aussi être présents pour naviguer vers la page précédente et la suivante.


Méthodes

Authors

Obtenir la fiche d'un auteur

/authors/by-id/{id}AuthorDetails
Paramètres sur le chemin
id (requis) — défaut : null

Lister les auteurs

/authors → array[ AuthorIdentity ]
Paramètres de requête
page (optionnel) — défaut : 1 — format : int32
Le numéro de la page.
size (optionnel) — défaut : 10 — format : int32
Le nombre d'éléments par page.
filter (optionnel) — défaut : null

Les critères de filtre disponibles sont :

  • city : le nom de la ville de naissance
  • country : le pays de naissance
  • name : le nom de famille
sort (optionnel) — défaut : null

Books

Obtenir la fiche d'un livre

/books/by-id/{id}BookDetails
Paramètres sur le chemin
id (requis) — défaut : null

Lister les livres

/books → array[ BookIdentity ]
Paramètres de requête
page (optionnel) — défaut : 1 — format : int32
Le numéro de la page.
size (optionnel) — défaut : 10 — format : int32
Le nombre d'éléments par page.
filter (optionnel) — défaut : null
Les critères de filtre disponibles sont uniquement isbn et title.
sort (optionnel) — défaut : null

Events

Obtenir les détails d'un événement

/events/by-id/{id}EventDetails
Paramètres sur le chemin
id (requis) — défaut : null

Lister les événements recensés

/events → array[ EventDetails ]
Paramètres de requête
page (optionnel) — défaut : 1 — format : int32
Le numéro de la page.
size (optionnel) — défaut : 10 — format : int32
Le nombre d'éléments par page.
filter (optionnel) — défaut : null

Les critères de filtre disponibles sont :

  • city : le nom de la ville où se tient l'événement
  • since : une date limite antérieure à l'événement
  • title : le titre de l'événement
  • until : une date limite postérieure à l'événement
sort (optionnel) — défaut : null

Members

Gestion des adhérents, de leur adhésion, de leur bibliothèque personnelle.

La sélection d'un adhérent peut se faire :

Créer un nouvel adhérent

/membersMemberDetails
Corps de la requête
MemberDetails (requis)

Ajouter une cotisation pour un adhérent

/members/{selector}/subscriptionsSubscriptionDetails
Le format pour créer une cotisation est le même que celui utilisé dans la collection des cotisations. Cependant, seules les propriétés amount, date et year sont nécessaires. L'identifiant est généré par le serveur et la seule monnaie supportée aujourd'hui est l'EURO.
Paramètres sur le chemin
selector (requis) — défaut : null
Corps de la requête
SubscriptionDetails (requis)

Supprimer la fiche d'un adhérent

/members/{selector}
Paramètres sur le chemin
selector (requis) — défaut : null

Supprimer une cotisation

/members/{selector}/subscriptions/{id}
Paramètres sur le chemin
selector (requis) — défaut : null
id (requis) — défaut : null

Exportation de la liste complète des adhérents

/members/export → String
Contrairement à la requête /members, celle-ci ne permet ni pagination ni tri de la réponse.

Lister les bibliothèques des adhérents

/members/libraries → array[ MemberLibraryDetails ]
Paramètres de requête
page (optionnel) — défaut : 1 — format : int32
Le numéro de la page.
size (optionnel) — défaut : 10 — format : int32
Le nombre d'éléments par page.
filter (optionnel) — défaut : null

Les critères de filtre disponibles sont :

  • name : le prénom ou le nom de famille de l'adhérent qui possède la bibliothèque
sort (optionnel) — défaut : null

Obtenir la description de la bibliothèque d'un adhérent

/members/libraries/{id}MemberLibraryDetails
Paramètres sur le chemin
id (requis) — défaut : null

Obtenir la fiche d'un adhérent

/members/{selector}MemberDetails
Paramètres sur le chemin
selector (requis) — défaut : null
Paramètres de requête
subscriptions (optionnel) — défaut : false
Demande la liste des cotisations du membre

Obtenir la description de la bibliothèque de l'adhérent

/members/{selector}/libraryMemberLibraryDetails
Paramètres sur le chemin
selector (requis) — défaut : null

Lister les adhérents de l'association

/members → array[ MemberIdentity ]
Paramètres de requête
page (optionnel) — défaut : 1 — format : int32
Le numéro de la page.
size (optionnel) — défaut : 10 — format : int32
Le nombre d'éléments par page.
filter (optionnel) — défaut : null

Les critères de filtre disponibles sont :

  • name : le prénom ou le nom de famille
  • since : une date limite antérieure à la première cotisation de l'adhérent
  • status : le statut de l'adhérent (actif ou inactif)
  • until : une date limite postérieure à la dernière cotisation de l'adhérent
  • year : une année pour laquelle l'adhérent a cotisé
sort (optionnel) — défaut : null

Lister les cotisations d'un adhérent

/members/{selector}/subscriptions → array[ SubscriptionDetails ]
Paramètres sur le chemin
selector (requis) — défaut : null

Modifier la fiche d'un adhérent

/members/{selector}MemberDetails
Paramètres sur le chemin
selector (requis) — défaut : null
Corps de la requête
MemberDetails (requis)

Modifier une cotisation

/members/{selector}/subscriptions/{id}SubscriptionDetails
Paramètres sur le chemin
selector (requis) — défaut : null
id (requis) — défaut : null
Corps de la requête
SubscriptionDetails (requis)

Publishers

Obtenir la fiche d'une collection d'édition

/collections/by-id/{id}CollectionDetails
Paramètres sur le chemin
id (requis) — défaut : null

Lister les collections d'édition

/collections → array[ CollectionIdentity ]
Paramètres de requête
page (optionnel) — défaut : 1 — format : int32
Le numéro de la page.
size (optionnel) — défaut : 10 — format : int32
Le nombre d'éléments par page.
filter (optionnel) — défaut : null

Les critères de filtre disponibles sont :

  • name : le nom de la collection
  • since : une date limite antérieure à la création de la collection
  • until : une date limite postérieure à la fin de la collection
sort (optionnel) — défaut : null

Obtenir la fiche d'un éditeur

/publishers/by-id/{id}PublisherDetails
Paramètres sur le chemin
id (requis) — défaut : null

Lister les éditeurs

/publishers → array[ PublisherIdentity ]
Paramètres de requête
page (optionnel) — défaut : 1 — format : int32
Le numéro de la page.
size (optionnel) — défaut : 10 — format : int32
Le nombre d'éléments par page.
filter (optionnel) — défaut : null

Les critères de filtre disponibles sont :

  • city : la ville d'établissement de l'éditeur
  • country : le pays d'établissement de l'éditeur
  • name : le nom de l'éditeur
  • since : une date limite antérieure à la création de la maison d'édition
  • until : une date limite postérieure à la dissolution de la maison d'édition
sort (optionnel) — défaut : null

Session

Ouvrir une nouvelle session

/sessionSessionInfo
Corps de la requête
AuthInfo (requis)

Obtenir les informations relatives à la session

/sessionSessionInfo

Models

Index

AuthInfo - Données d'authentification

Propriété Type Description
login String
L'identifiant de login de l'utilisateur, c'est à dire son adresse de courriel.
password String
Le mot de passe de connexion de l'utilisateur.

AuthorDetails - Modèle d'un auteur

Propriété Type Description
id String
name String
city (optional) String
country (optional) String
lastName (optional) String
firstName (optional) String
fullName (optional) String
email (optional) String
comment (optional) String
birthCity (optional) String
birthArea (optional) String
birthCountry (optional) String
birthDate (optional) date
format: date
La date de naissance de l'auteur.
deathCity (optional) String
deathArea (optional) String
deathCountry (optional) String
deathDate (optional) date
format: date
La date de décès de l'auteur.
noolink (optional) String
sffOnly (optional) Boolean
created (optional) Integer
dissolved (optional) Integer

AuthorIdentity - Résumé d'un auteur

Propriété Type Description
id String
name String
city (optional) String
country (optional) String

BookDetails -

Propriété Type Description
id String
authors (optional) String
isbn String
title (optional) String
comment (optional) String
format (optional) String
pages (optional) Integer
collection (optional) CollectionIdentity
publisher (optional) PublisherIdentity
legalSubmission (optional) VariableDate
publication (optional) VariableDate
printing (optional) VariableDate

BookIdentity -

Propriété Type Description
id String
authors (optional) String
isbn String
title (optional) String
collection (optional) String
publisher (optional) String

CollectionDetails -

Propriété Type Description
id String
name String
comment (optional) String
ended (optional) Boolean
publisher (optional) PublisherIdentity
noolink (optional) String
sffOnly (optional) Boolean
creationYear (optional) Integer
endYear (optional) Integer
youth (optional) Boolean

CollectionIdentity -

Propriété Type Description
id String
name String

EventDetails - Modèle d'un événement

Propriété Type Description
id (optional) String
L'identifiant unique de l'événement.
startDate (optional) date
format: date
La date de début de l'événement.
endDate (optional) date
format: date
La date de fin de l'événement.
editDate (optional) date
format: date
La date d'édition de l'événement dans la base de données.
title (optional) String
Le nom (titre) de l'événement.
subtitle (optional) String
Un sous-titre ou une description courte de l'événement.
description (optional) String
Une description longue de l'événement.
city (optional) String
La ville où se tient l'événement.
place (optional) String
Le nom du lieu, ou l'adresse, au sein de la ville.
source (optional) String
La référence de la source de l'information, ou evenements@noosfere.com pour un événement proposé via le site.
website (optional) String
Le lien vers le site Web de l'événement.
section (optional) String

Une chaîne de 1 à 5 caractères, où chaque lettre donne un aspect présent durant l'événement:

  • Illustration
  • Littérature
  • Cinéma
  • BD
  • Autres

MemberDetails -

Propriété Type Description
id (optional) Long
format: int64
firstname (optional) String
lastname (optional) String
surname (optional) String
description (optional) String
email (optional) String
membership (optional) Membership
role (optional) String
Enum:
  • MEMBER
  • WRITER
  • EDITOR
  • ADMIN
subscriptions (optional) array[SubscriptionDetails]

MemberIdentity -

Propriété Type Description
id (optional) Long
format: int64
firstname (optional) String
lastname (optional) String
surname (optional) String

MemberLibraryDetails -

Propriété Type Description
id String
firstname (optional) String
lastname (optional) String
managementMode (optional) String
Enum:
  • COLLECTOR
  • USER
lendingMode (optional) String
Enum:
  • NEVER
  • EXCEPTIONALLY
  • true

Membership -

Propriété Type Description
status (optional) String
Enum:
  • ACTIVE
  • GUEST
  • INACTIVE
startDate (optional) date
format: date
endDate (optional) date
format: date
endMessage (optional) String

PublisherDetails -

Propriété Type Description
id String
name String
city (optional) String
country (optional) String
address (optional) String
postCode (optional) String
email (optional) String
website (optional) String
noolink (optional) String
comment (optional) String
sffOnly (optional) Boolean
created (optional) Integer
dissolved (optional) Integer

PublisherIdentity -

Propriété Type Description
id String
name String
city (optional) String
country (optional) String

RequestError -

Propriété Type Description
reason (optional) String

SessionInfo -

Propriété Type Description
user SessionInfo_user
server SessionInfo_server
token SessionInfo_token

SessionInfo_server -

Propriété Type Description
dbMinusurl (optional) String

SessionInfo_token -

Propriété Type Description
expires Date
format: date-time
issued Date
format: date-time
value String

SessionInfo_user -

Propriété Type Description
authorities (optional) array[String]
login String
enabled (optional) Boolean
expired (optional) Boolean

SubscriptionDetails - Représentation d'une cotisation

Propriété Type Description
id (optional) Long
format: int64
amount (optional) Integer
Le montant de la cotisation.
currency (optional) String
Enum:
  • EURO
  • FRANC
La monnaie qualifiant le montant de la cotisation. Seul l'EURO est supporté aujourd'hui.
date (optional) date
format: date
La date de paiement de la cotisation.
year (optional) Integer
L'année couverte par la cotisation.

VariableDate -

Propriété Type Description
day (optional) Integer
month (optional) Integer
year (optional) Integer