Aller au contenu

NOUVEAUIshedDB 1.0 : venez de MongoDB avec vos données, copie vérifiée document par document. En savoir plus →

L’API HTTPS

Tout ce que font les bibliothèques passe par cette API : du JSON sur HTTPS, utilisable depuis n'importe quel langage. Les méthodes de MongoDB y ont chacune leur adresse (…/collections/patients:find), avec les mêmes arguments que dans le pilote.

L'adresse

https://votre-ished.example/v1/… parle au premier cluster du projet ; https://votre-ished.example/v1/clusters/<nom>/… à un cluster nommé. L'adresse exacte est dans la console (Vue d'ensemble › « Obtenir l'adresse de connexion »). GET /v1/health répond { "ok": true } sans clé : il dit seulement que le service répond.

L'authentification

Chaque requête porte une clé du projet :

curl -H "Authorization: Bearer $ISHED_KEY" "$ISHED_URL/v1/bases"

La clé n'est acceptée que depuis une adresse IP autorisée du projet, et seulement en HTTPS. Son rôle borne ce qu'elle peut faire : lecture, écriture (lire et écrire), administration (en plus : définitions, import, journal). Une clé limitée à certaines bases ou collections ne voit que celles-là.

Les requêtes et les réponses

Les corps sont en JSON (Content-Type: application/json), 2 Mo au plus (16 Mo pour un import). Trois types que JSON n'a pas s'écrivent ainsi, dans les deux sens :

ValeurEn JSON
une date{"~date": "2026-11-12T08:00:00.000Z"}
un entier au-delà de 2^53{"~int": "9007199254740993"}
des octets{"~bytes": "<base64>"}
const ajout = await fetch(`${process.env.ISHED_URL}/v1/bases/Clinique/collections/visites:insertOne`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.ISHED_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ document: { patient: 'awa', le: { '~date': '2026-11-12T08:00:00.000Z' } } }),
});
console.log(ajout.status, await ajout.json()); // 201 { acknowledged: true, insertedId: '…' }

const trouves = await fetch(`${process.env.ISHED_URL}/v1/bases/Clinique/collections/visites:find`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.ISHED_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ filter: { patient: 'awa' }, sort: { le: -1 }, limit: 10 }),
});
const { documents } = await trouves.json();
console.log(documents[0].le); // { '~date': '2026-11-12T08:00:00.000Z' }

Les lectures rendent 1000 documents au plus par réponse ; la suite se demande avec le nextPageToken reçu.

Avec Postman

Toute l'API est dans une collection Postman, avec son environnement : une requête par adresse, dans un ordre qui se joue du début à la fin. Importez les deux fichiers (Import, puis déposez-les), choisissez l'environnement « IshedDB », mettez l'adresse de votre cluster dans baseUrl et votre clé dans ishedKey (une variable secrète). Jouée en entier avec le Runner, la collection crée la collection rendezvous_postman dans la base Essais et la supprime à la fin ; il lui faut une clé d'administration. Nos tests la jouent en entier contre un vrai serveur IshedDB à chaque version.

La collection ne contient aucune clé. Utilisez l'application de bureau de Postman : avec son agent dans le nuage, vos requêtes et votre clé passent par les serveurs de Postman, depuis une adresse IP qui n'est pas la vôtre.

Les erreurs

Un refus répond un statut HTTP et { "error": { "code", "message", "requestId" } } (et parfois details, par exemple les champs refusés). Donnez le requestId à l'assistance : il retrouve la requête dans nos journaux.

StatutcodeQuand
400invalid-argumentun argument ou un document refusé (le message dit lequel et pourquoi)
401unauthenticatedaucune clé, ou une clé inconnue, révoquée ou expirée
403permission-deniedune adresse IP non autorisée, ou une clé dont le rôle ne suffit pas
404not-foundun document, une collection ou un cluster qui n'existe pas
409already-exists, abortedun identifiant ou une valeur unique déjà pris ; une transaction en conflit
412failed-preconditionune opération impossible dans l'état présent
413payload-too-largeun corps trop lourd
429resource-exhaustedle stockage ou le rythme du palier atteint : réessayez plus tard
504deadline-exceededune requête trop longue

Les adresses

MéthodeAdresseCléCe qu’elle fait
GET/v1/baseslectureLes bases du cluster : nom, taille sur disque, vide ou non, et la taille totale (une clé limitée : ses bases).
GET/v1/bases/{base}/collectionslectureLes collections et les vues d’une base, avec leur nombre de documents.
POST/v1/bases/{base}:runCommandlectureUne commande de MongoDB sur la base : create, collMod, drop, explain (la clé que demande la commande).
POST/v1/bases/{base}:watchlectureLes changements de toute la base, comme un change stream (réponse dès qu’il y en a, 20 s d’attente au plus).
POST/v1:watchlectureLes changements de tout le cluster.
GET/v1/bases/{base}/collections/{collection}/definitionlectureLa définition d’une collection : champs, uniques, index, expiration, validation.
PUT/v1/bases/{base}/collections/{collection}/definitionadministrationPose la définition d’une collection (corps : { definition }).
POST/v1/bases/{base}/collections/{collection}/documentsécritureAjoute un document (corps : { data }, et { id } pour le choisir) ; répond le document avec son identifiant.
GET/v1/bases/{base}/collections/{collection}/documents/{id}lectureLit un document ; ?reveal=champ pour un champ caché, ?select=a,b pour certains champs.
PUT/v1/bases/{base}/collections/{collection}/documents/{id}écritureRemplace un document, ou le crée (corps : { data }).
PATCH/v1/bases/{base}/collections/{collection}/documents/{id}écritureModifie des champs d’un document (corps : { changes }, avec les valeurs spéciales ~increment, ~remove…).
DELETE/v1/bases/{base}/collections/{collection}/documents/{id}écritureSupprime un document.
POST/v1/bases/{base}/collections/{collection}:querylectureLes documents d’une requête dans la syntaxe d’IshedDB : where, orderBy, limit, offset, select, pageToken.
POST/v1/bases/{base}/collections/{collection}:countlectureLe nombre de documents d’une requête (where).
POST/v1/bases/{base}/collections/{collection}:estimatelectureLe nombre de documents de la collection, aussitôt.
POST/v1:beginTransactionlectureOuvre une transaction (60 s au plus, 20 s sans requête) ; répond son identifiant, à donner dans l’en-tête X-Ished-Transaction.
POST/v1:commitlectureValide une transaction : tout ce qu’elle a écrit, ou rien.
POST/v1:rollbacklectureAbandonne une transaction.
POST/v1/bases/{base}/collections/{collection}:updateAllécritureModifie tous les documents d’une requête (corps : { where, changes }).
POST/v1/bases/{base}/collections/{collection}:existslectureSi au moins un document répond à la requête.
POST/v1/bases/{base}/collections/{collection}:countBylectureLe nombre de documents par valeur d’un champ (corps : { path, where, order, limit }).
POST/v1/bases/{base}/collections/{collection}:updateFirstécritureModifie le premier document d’une requête, ou le crée ({ create: true }).
POST/v1/bases/{base}/collections/{collection}:deleteWhereécritureSupprime les documents d’une requête (ou le premier, { first: true }).
POST/v1/bases/{base}/collections/{collection}:importadministrationImporte des documents tels qu’ils sont, identifiants gardés (1000 par appel).
GET/v1/auditadministrationLe journal des accès du cluster (?limit=, 1000 au plus) : qui a lu ou écrit quoi, jamais une valeur.
GET/v1/audit:verifyadministrationVérifie la chaîne du journal : une ligne retirée ou changée se voit.
POST/v1/bases/{base}/collections/{collection}:createécritureComme db.createCollection : une collection vide (avec validator), ou une vue (viewOn, pipeline).
POST/v1/bases/{base}/collections/{collection}:collModécritureComme collMod : change une vue ou les règles de validation.
POST/v1/bases/{base}/collections/{collection}:dropécritureSupprime la collection et ses documents, ou la vue.
POST/v1/bases/{base}/collections/{collection}:explainlectureLe plan d’un find, d’un aggregate, d’un count ou d’un distinct (verbosity).
POST/v1/bases/{base}/collections/{collection}:findlectureComme find : filter, sort, projection, limit, skip ; 1000 documents par page, puis nextPageToken.
POST/v1/bases/{base}/collections/{collection}:bulkWriteécritureComme bulkWrite : des insertOne, updateOne, updateMany, replaceOne, deleteOne, deleteMany dans l’ordre (ordered).
POST/v1/bases/{base}/collections/{collection}:aggregatelectureComme aggregate : un pipeline, ses résultats 1000 par 1000 (limit, skip).
POST/v1/bases/{base}/collections/{collection}:estimatedDocumentCountlectureComme estimatedDocumentCount.
POST/v1/bases/{base}/collections/{collection}:createIndexécritureComme createIndex : keys et options (unique, name, partialFilterExpression, texte, wildcard).
POST/v1/bases/{base}/collections/{collection}:createIndexesécritureComme createIndexes : plusieurs index d’un coup.
POST/v1/bases/{base}/collections/{collection}:listIndexeslectureComme listIndexes : les index de la collection.
POST/v1/bases/{base}/collections/{collection}:dropIndexécritureComme dropIndex : un index, par son nom ou ses clés.
POST/v1/bases/{base}/collections/{collection}:dropIndexesécritureComme dropIndexes : tous les index (sauf _id).
POST/v1/bases/{base}/collections/{collection}:watchlectureComme watch : les changements de la collection (pipeline, resumeAfter, fullDocument…).
POST/v1/bases/{base}/collections/{collection}:distinctlectureComme distinct : les valeurs d’un champ (key, filter).
POST/v1/bases/{base}/collections/{collection}:findOnelectureComme findOne : le premier document du filtre, ou null.
POST/v1/bases/{base}/collections/{collection}:countDocumentslectureComme countDocuments.
POST/v1/bases/{base}/collections/{collection}:insertOneécritureComme insertOne (corps : { document }).
POST/v1/bases/{base}/collections/{collection}:insertManyécritureComme insertMany (corps : { documents }, 1000 au plus), tout ou rien.
POST/v1/bases/{base}/collections/{collection}:updateOneécritureComme updateOne : filter, update ($set, $inc…), upsert.
POST/v1/bases/{base}/collections/{collection}:updateManyécritureComme updateMany.
POST/v1/bases/{base}/collections/{collection}:replaceOneécritureComme replaceOne : filter, replacement, upsert.
POST/v1/bases/{base}/collections/{collection}:deleteOneécritureComme deleteOne.
POST/v1/bases/{base}/collections/{collection}:deleteManyécritureComme deleteMany.

Les arguments des méthodes de MongoDB sont ceux de son pilote : filter, update, sort, projection, limit, skip, pipeline, upsert, ordered… La bibliothèque Node.js donne la liste des opérateurs.