
Intégration API Microsoft 365
Nous développons votre connecteur Microsoft 365
Nous passons par Microsoft Graph pour lire et écrire dans SharePoint et OneDrive, avec un périmètre Sites.Selected défendable. Agenda et courrier sont une autre page.
- Équipe produit senior
- connecteurs fichiers Graph en production
- du cadrage au monitoring
À quoi sert l'API Microsoft 365 et pourquoi connecter OneDrive ou SharePoint à son logiciel ?
Microsoft 365 est l'environnement de travail standard de la majorité des grandes entreprises françaises : fichiers dans OneDrive et SharePoint, agenda dans Outlook, messages dans Teams. L'intégration via Microsoft Graph permet à votre application de déposer automatiquement des documents dans la bibliothèque SharePoint du client, de lire les fichiers partagés sans que l'utilisateur les télécharge manuellement, et de maintenir la GED à jour sans outil parallèle. On l'intègre quand les équipes clients vivent dans l'environnement Microsoft et que votre logiciel doit s'y insérer sans créer un dossier de stockage supplémentaire que personne n'alimentera.
Ce que nos clients construisent sur Graph fichiers
Dépôt métier dans la bibliothèque client
Devis, factures, PV atterrissent dans SharePoint. Lien de partage interne plutôt qu'une pièce jointe qui sort du locataire.
GED dont la vérité reste SharePoint
Le produit indexe via delta, n'héberge pas le binaire, et réagit à un dépôt dans un dossier « à traiter ».
Portail fournisseur borné à un site
Sites.Selected : cette bibliothèque, pas Files.Read.All. C'est souvent la seule version signable par un DSI.
Contrat généré, uploadé, suivi
Session reprise au-delà de 10 Mio, invitation Graph aux signataires internes, versions via cTag. Bascule CSOM/REST vers Graph si un connecteur existant traine.
Ce que ça change dans votre GED Microsoft
La technique au service d'un résultat mesurable : le fichier au bon endroit, un périmètre signable, moins de pièces perdues.
Plus de GED parallèle
Le logiciel métier écrit où l'entreprise range déjà. Les dossiers « copie sur le serveur » disparaissent du process.
Un DSI peut signer le connecteur
Accès borné à un site ou une bibliothèque, rôle assigné, journal d'audit. Ce n'est pas un accès à tous les fichiers déguisé.
Un dépôt déclenche le workflow
Le devis arrivé dans la bibliothèque avance le dossier. Plus d'agent de scan sur un partage réseau.
Les gros fichiers passent
Les uploads volumineux sont découpés et repris. Vous n'apprenez pas en production qu'un contrat de 50 Mo casse le flux.
Comment nous livrons votre connecteur Microsoft 365
Cadrage
Quels sites, quelles bibliothèques, délégué ou application, Selected ou pas. Aucune permission *.All concurrente. On écrit le périmètre avant le client HTTP.
Développement
deltaLink par drive, subscriptions 42 300 min, upload session, limiteur en unités de ressource, Retry-After qui pause tout le locataire.
Recette
410 sur delta, PUT avec Authorization, fichier à étiquette de sensibilité en app-only, consentement sans POST /permissions. Rejeu hors pointe.
Monitoring
Alerte 429 (ils comptent dans le quota), abonnement driveItem, unités consommées. Journal : quelle app, quel site, quel rôle Selected.
Ce que permet Graph pour SharePoint et OneDrive
- Sites, drives, driveItems
- GET /sites, /sites/{id}/drives, adressage par id ou par chemin (:). Un site a plusieurs bibliothèques. /me/drive, /groups, /shares.
- Delta et notifications
- GET .../root/delta, @odata.deltaLink à persister, token=latest possible. Subscriptions driveItem jusqu'à 42 300 minutes. Prefer includesecuritywebhooks pour les droits (pro uniquement).
- Upload et download
- PUT content pour un petit fichier. createUploadSession au-delà de 10 Mio : fragments < 60 Mio, multiples de 320 Kio, strictement séquentiels. downloadUrl préauthentifiée, 1 heure, non cessible en cache.
- Permissions Selected
- Sites.Selected, Lists/ListItems/Files.SelectedOperations.Selected. Consentement Entra plus POST /permissions (read, write, owner, fullcontrol). Les trois conditions sont nécessaires.
Le vocabulaire Graph fichiers
- Sites.Selected
- Scope qui ne donne rien tant qu'un rôle n'est pas assigné sur le site (ou la liste, l'item, le fichier). Les trois conditions : scope consenti, permission assignée, jeton qui porte le scope.
- @odata.deltaLink
- Curseur de la dernière page d'un delta. Une page n'a jamais nextLink et deltaLink ensemble. token=latest : synchroniser à partir de maintenant, sans crawl initial.
- createUploadSession
- Reprise au-delà de 10 Mio. Fragments multiples de 327 680 octets, séquentiels, < 60 Mio. L'uploadUrl est préauthentifiée : un header Authorization produit 401.
- Unités de ressource
- 1 : lecture, delta avec jeton, download. 2 : listage, delta sans jeton, écriture. 5 : permissions, $expand=permissions compris. C'est le compteur de throttling, pas le nombre de requêtes.
- cTag / eTag
- cTag : le contenu a changé. eTag : les métadonnées. Comparer cTag avant de retélécharger un binaire. downloadUrl vit une heure et n'est pas invalidée tout de suite si on retire une permission.
- Retry-After
- Seul signal de throttling SharePoint. L'ignorer aggrave le trou parce que les 429 comptent. On pause toutes les requêtes du locataire pendant la fenêtre, pas seulement l'appel fautif.
Les contraintes réelles de Graph fichiers
Le throttling n'est pas par site
Couches utilisateur, locataire, application+locataire, charge SharePoint. Paralyser « un autre » site du même locataire puise dans le même seau. Limites d'application selon le nombre de licences, sur 24 h et sur 1 min.
Selected sans assignment = zéro accès
Le consentement admin n'est pas l'autorisation métier. Une permission *.All concurrente dans Entra ID anéantit le périmètre. Assigner Selected sur un fichier casse l'héritage.
L'upload a deux hôtes mentaux
Bearer sur createUploadSession seulement. Fragments hors ordre : erreur. Fichier protégé par étiquette de sensibilité : pas de replace en app-only, il faut du délégué.
CSOM et REST coûtent plus cher
Plus d'unités que Graph pour la même opération, plus des limites internes. Graph est la voie prescrite. Ne pas décorer le User-Agent, c'est une file plus lente. Scans massifs : nuit et week-end du fuseau locataire.
API SharePoint ou API Google Drive ?
Deux disques d'entreprise. Le bon dépend du tenant déjà payé, pas du SDK.
| Critère | Microsoft 365Cette page | Google DriveDrive API v3 |
|---|---|---|
| Parc typique | SharePoint / OneDrive du locataire | Workspace, My Drive et shared drives |
| Périmètre fin | Sites.Selected + POST /permissions | drive.file + Picker, ou scopes restreints |
| Incrément | delta query, deltaLink, token=latest | changes.list, startPageToken |
| Notification | Graph, jusqu'à ~30 jours | Push sans corps, pas de HMAC |
| Quota | Unités SharePoint, Retry-After seul | Unités Drive (5 / 100 / 200 / 50) |
| Gros fichiers | Session, multiples de 320 Kio | Resumable dès 5 Mo, URI 7 jours |
| Le bon cas | L'entreprise est déjà sur Microsoft 365 | L'entreprise est déjà sur Workspace |
Agenda et courrier Outlook ne sont pas dans ce comparatif. Box et Dropbox se discutent quand la GED n'est pas le tenant Microsoft ou Google.
Ce que nous mesurons sur une intégration SharePoint
Les autres API de fichiers
Si le locataire n'est pas Microsoft 365, ces options se discutent au cadrage.
Microsoft 365Nous développons votre connecteur Microsoft 365Cette page
Google DriveDrive et export Docs/Sheets, scope drive.file plus Picker.
BoxGED entreprise, webhooks signés, App Users, admin_logs.
DropboxPartage de fichiers, curseur list_folder, App Folder.On combine Microsoft 365 avec
La stack qui entoure SharePoint et OneDrive sur nos projets.
Intégration SharePoint : vos questions
Application Entra ID, Graph v1.0, périmètre Sites.Selected (consentement puis POST /permissions), User-Agent décoré, delta par drive plutôt qu'un crawl children, subscriptions sur le driveItem, upload en session au-delà de 10 Mio. Accuser le webhook par 202, travailler en file, honorer Retry-After sur tout le locataire. La partie sensible n'est pas le premier GET /sites, c'est les unités de ressource et l'absence de permission *.All concurrente.
Non. Le consentement Entra n'accorde aucun fichier. Il faut ensuite POST /sites/{id}/permissions (ou list / item / file) avec un rôle read, write, owner ou fullcontrol, et un jeton qui porte encore le scope. Les trois conditions sont nécessaires. Une permission Files.Read.All posée « en plus » dans Entra ID écrase le périmètre. C'est l'argument que veut entendre un DSI, et la cause n°1 d'un POC qui « marchait » trop bien.
Un premier flux utile, typiquement dépôt d'un PDF dans une bibliothèque Selected avec lien interne, se livre en deux à trois semaines. Un connecteur GED (delta, webhooks, upload session, audit) demande plutôt six à huit semaines. Une bascule CSOM/REST se chiffre à part (décoration du trafic, compte d'unités, fenêtre hors pointe). Nous cadrons sites et rôles avant de coder. C'est un arbitrage de cadrage, écrit avant le premier appel, pas une surprise de recette.
On suit le tenant. Microsoft 365 : Graph fichiers, Sites.Selected. Workspace : Drive v3, souvent drive.file + Picker pour éviter l'évaluation de sécurité des scopes restreints. Les deux ont un incrément (delta vs changes) et un push à relecture. Box et Dropbox se discutent si la GED est déjà là, hors des deux géants de suite bureautique. C'est un arbitrage de cadrage, écrit avant le premier appel, pas une surprise de recette.
Un deltaLink par drive, token=latest si vous partez de maintenant, webhooks pour le signal, un delta cadencé plutôt qu'un delta par notification si le trafic est dense. $select partout. Jamais children en boucle (2 unités) là où un delta avec jeton suffit (1 unité). Filet : un delta périodique au plus une fois par jour. Scans massifs la nuit du fuseau locataire. Graph Data Connect si le volume sort du throttling interactif.
Un projet d'intégration SharePoint ?
Parlons-en. 30 minutes pour cadrer sites, Sites.Selected, et ce que Graph fichiers permet vraiment, sans recycler la fiche Outlook.
Parler de mon projet SharePoint