Une opération de longue durée est une méthode d'API dont l'exécution prend plus de temps que ce qui est approprié pour une réponse d'API. En règle générale, vous ne souhaitez pas maintenir le thread appelant ouvert pendant l'exécution de la tâche, car cela offre une mauvaise expérience utilisateur. Il est préférable de renvoyer un type de promesse à l'utilisateur et de lui permettre de revenir plus tard.
L'API Google Drive renvoie une opération de longue durée chaque fois que vous appelez la méthode download sur la
files ressource pour télécharger le contenu d'un fichier
via l'API Drive ou ses bibliothèques
clientes.
La méthode renvoie une ressource operations au
client. Vous pouvez utiliser la ressource operations pour récupérer de manière asynchrone l'
état de la méthode d'API en interrogeant l'opération via la méthode get. Les opérations de longue durée de l'API Drive respectent
le modèle de conception des opérations de longue durée de Google Cloud
pattern.
Pour en savoir plus, consultez la page Opérations de longue durée.
Présentation du processus
Le schéma suivant illustre les étapes générales du fonctionnement de la méthode file.download.
Appeler
files.download: lorsque votre application appelle la méthodedownload, elle lance la requête de téléchargement de l'API Drive pour le fichier. Pour en savoir plus, consultez Télécharger des fichiers.Demander des autorisations : la requête envoie des identifiants d'authentification à l' API Drive. Si votre application nécessite d'appeler l'API Drive à l'aide d'une authentification utilisateur qui n'a pas encore été accordée, elle invite l'utilisateur à se connecter. Votre application demande également l'accès avec les champs d'application que vous spécifiez lors de la configuration de l'authentification.
Démarrer le téléchargement : une requête d'API Drive est envoyée pour démarrer le téléchargement du fichier. La requête peut être adressée à Google Vids ou à un autre contenu Google Workspace.
Démarrer l'opération de longue durée : une opération de longue durée commence et gère le processus de téléchargement.
Renvoyer l'opération en attente : l'API Drive renvoie une opération en attente contenant des informations sur l'utilisateur qui effectue la requête et plusieurs champs de métadonnées de fichier.
État initial en attente : votre application reçoit l'opération en attente avec un état initial en attente
done=null. Cela indique que le fichier n'est pas encore prêt à être téléchargé et que l'état de l'opération est en attente.Appeler
operations.getet vérifier le résultat : votre application appellegetaux intervalles recommandés pour interroger le résultat de l'opération et obtenir le dernier état d'une opération de longue durée. Si l'état en attentedone=falseest renvoyé, votre application doit continuer à interroger jusqu'à ce que l'opération renvoie l'état terminé (done=true). Pour les fichiers volumineux, prévoyez d'interroger plusieurs fois. Pour en savoir plus, consultez Obtenir les détails d'une opération de longue durée.Vérifier l'état en attente : si l'état en attente
done=trueest renvoyé par l'opération de longue durée, cela indique que le fichier est prêt à être téléchargé et que l' état de l'opération est terminé.Renvoyer l'opération terminée avec l'URI de téléchargement : une fois l'opération de longue durée terminée, l' API Drive renvoie l'URI de téléchargement et le fichier est désormais disponible pour l'utilisateur.
Télécharger des fichiers
Pour télécharger du contenu dans le cadre d'une opération de longue durée, utilisez la download méthode sur la
files ressource. La méthode prend les paramètres file_id, mime_type et revision_id :
Obligatoire. Le paramètre de chemin d'accès
file_idcorrespond à l'ID du fichier à télécharger.Facultatif. Le paramètre de requête
mime_typeindique le type MIME que la méthode doit utiliser. Il n'est disponible que lors du téléchargement de contenu multimédia non blob (tel que des documents Google Workspace). Pour obtenir la liste complète des types MIME compatibles, consultez Types MIME d'exportation pour les documents Google Workspace.Si le type MIME n'est pas défini, le document Google Workspace est téléchargé avec un type MIME par défaut. Pour en savoir plus, consultez Types MIME par défaut.
Facultatif. Le paramètre de requête
revision_idcorrespond à l'ID de révision du fichier à télécharger. Il n'est disponible que lors du téléchargement de fichiers blob, Google Docs et Google Sheets. Renvoie le code d'erreurINVALID_ARGUMENTlors du téléchargement d'une révision spécifique sur des fichiers non compatibles.
La méthode download est le seul moyen de télécharger des fichiers Vids au format MP4 et est généralement la plus adaptée au téléchargement de la plupart des fichiers vidéo. Si vous tentez d'exporter des fichiers Google Vids, vous recevez une
fileNotExportable erreur.
Les liens de téléchargement générés pour Google Docs ou Sheets renvoient initialement une redirection. Cliquez sur le nouveau lien pour télécharger le fichier.
Une requête adressée à la méthode download qui lance l'opération de longue durée et la requête permettant de récupérer l'URI de téléchargement final doivent toutes deux utiliser des clés de ressource. Pour en savoir plus, consultez
Accéder aux fichiers Drive partagés par lien à l'aide de clés de ressource.
Le protocole de requête est indiqué ici.
POST https://www.googleapis.com/drive/v3/files/{FILE_ID}/downloadRemplacez FILE_ID par le fileId du fichier que vous souhaitez
télécharger.
Types MIME par défaut
Si aucun type MIME n'est défini lors du téléchargement de contenu non blob, les types MIME par défaut suivants sont attribués :
| Type de document | Format | Type MIME | Extension de fichier |
|---|---|---|---|
| Google Apps Script | JSON | application/vnd.google-apps.script+json | .json |
| Google Docs | Microsoft Word | application/vnd.openxmlformats-officedocument.wordprocessingml.document | .docx |
| Google Drawings | PNG | image/png | .png |
| Google Forms | ZIP | application/zip | .zip |
| Google Sheets | Microsoft Excel | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | .xlsx |
| Google Sites | Texte brut | text/raw | .txt |
| Google Slides | Microsoft PowerPoint | application/vnd.openxmlformats-officedocument.presentationml.presentation | .pptx |
| Google Vids | MP4 | video/mp4 | .mp4 |
| Jamboard | application/pdf |
Télécharger la réponse
Lorsque vous appelez la download méthode, le
corps de la réponse se compose d'une
ressource représentant une opération de longue durée. La méthode renvoie généralement un lien permettant de télécharger le contenu du fichier.
{
"done": true,
"metadata": {
"@type": "type.googleapis.com/google.apps.drive.v3.DownloadFileMetadata",
"resourceKey": "RESOURCE_KEY"
},
"name": "NAME",
"response": {
"@type": "type.googleapis.com/google.apps.drive.v3.DownloadFileResponse",
"downloadUri": "DOWNLOAD_URI",
"partialDownloadAllowed": false
}
}
Ce résultat inclut les valeurs suivantes :
RESOURCE_KEY : une clé de ressource permet de protéger votre fichier contre tout accès non autorisé. Pour en savoir plus, consultez Accéder aux fichiers Drive partagés par lien à l'aide de clés de ressource.
NAME : nom attribué par le serveur.
DOWNLOAD_URI : URI de téléchargement final du fichier.
Notez que le champ partialDownloadAllowed indique si un téléchargement partiel est autorisé et est défini sur true
lors du téléchargement de contenu de fichier blob.
Obtenir les détails d'une opération de longue durée
Les opérations de longue durée sont des appels de méthodes dont l'exécution peut prendre un temps considérable. En règle générale, les opérations de téléchargement nouvellement créées sont initialement renvoyées dans un état en attente (done=null), en particulier pour les fichiers Vids.
Vous pouvez utiliser la ressource operations fournie par l'API Drive
pour vérifier l'état de l'opération de longue durée en cours de traitement en
incluant le nom unique attribué par le serveur.
La méthode get obtient de manière asynchrone le dernier état d'une
opération de longue durée. Cette méthode permet aux clients d'interroger le résultat de l'opération à des intervalles recommandés par le service d'API.
Interroger une opération de longue durée
Pour interroger une opération de longue durée disponible, appelez la
get méthode de façon répétée jusqu'à la fin de l'opération.
Observez un intervalle exponentiel (
10 secondes, par exemple) entre chaque tentative d'interrogation.
Une opération de longue durée reste disponible pendant au moins 12 heures, mais dans certains cas, elle peut persister plus longtemps. Cette durée est susceptible d'être modifiée et peut varier en fonction des types de fichiers. Une fois la ressource expirée, une nouvelle requête de méthode download est nécessaire.
Toutes les requêtes adressées à get doivent utiliser des clés de ressource. Pour en savoir plus, consultez
Accéder aux fichiers Drive partagés par lien à l'aide de clés de ressource.
Les protocoles de requête sont indiqués ici.
Appel de méthode
operations.get(name='NAME');
Remplacez NAME par le nom attribué par le serveur à l'opération, comme
indiqué dans la réponse à la requête de la méthode download.
curl
curl -i -H \
'Authorization: Bearer $(gcloud auth print-access-token)" \
'https://googleapis.com/drive/v3/operations/NAME?alt=json'
Remplacez NAME par le nom attribué par le serveur à l'opération, comme
indiqué dans la réponse à la requête de la méthode download.
La commande utilise le chemin d'accès /drive/v3/operations/NAME.
Notez que le name n'est renvoyé que dans la réponse à une requête download.
Il n'existe aucun autre moyen de le récupérer, car l'API Drive n'est pas compatible avec la méthode list. Si la valeur name est perdue, vous devez générer une nouvelle réponse en appelant à nouveau la requête de la méthode download.
La réponse à une requête get se compose d'une ressource représentant une opération de longue durée. Pour en savoir plus, consultez Télécharger
la réponse.
Lorsque la réponse contient un état terminé (done=true), l'opération de longue durée est terminée.
Télécharger une révision
Vous pouvez utiliser la valeur du
headRevisionId champ
de la ressource files pour télécharger la dernière
révision. Cela récupère la révision qui correspond aux métadonnées du fichier que vous avez récupéré précédemment. Pour télécharger les données de toutes les révisions précédentes du
fichier qui sont toujours stockées dans le cloud, vous pouvez appeler la list méthode sur la revisions ressource avec le fileId paramètre. Cela renvoie tous les revisionIds du fichier.
Pour télécharger le contenu de révision des fichiers blob, vous devez appeler la get méthode sur la
revisions ressource avec l'ID du fichier à
télécharger, l'ID de la révision et le alt=media paramètre d'URL. Le paramètre d'URL alt=media indique au serveur qu'un téléchargement de contenu est demandé en tant que format de réponse alternatif.
Les révisions de Google Docs, Sheets, Slides et Vids ne peuvent pas être téléchargées à l'aide de la méthode get avec l'URL alt=media. Sinon, une erreur fileNotDownloadable est générée.
Le paramètre d'URL alt=media est un paramètre
système disponible
dans toutes les API Google REST. Si vous utilisez une bibliothèque cliente pour l'API Drive, vous n'avez pas besoin de définir explicitement ce paramètre.
Le protocole de requête est indiqué ici.
GET https://www.googleapis.com/drive/v3/files/{FILE_ID}/revisions/{REVISION_ID}?alt=mediaRemplacez les éléments suivants :
- FILE_ID :
fileIddu fichier que vous souhaitez télécharger. - REVISION_ID :
revisionIdde la révision que vous souhaitez télécharger.
Les révisions de Google Docs, Drawings et Slides incrémentent automatiquement les numéros de révision. Toutefois, la série de nombres peut comporter des lacunes si des révisions sont supprimées. Vous ne devez donc pas vous fier aux numéros séquentiels pour récupérer les révisions.
Résoudre les problèmes liés aux opérations de longue durée
Lorsqu'une opération de longue durée échoue, sa réponse inclut un code d'erreur Google Cloud canonique.
Le tableau suivant affiche chaque code d'erreur, le code d'état HTTP mappé, une description et une recommandation sur la manière de gérer le code d'erreur. Pour de nombreuses erreurs, l'action recommandée consiste à réessayer la requête à l'aide d'un intervalle exponentiel entre les tentatives.
Pour en savoir plus sur ce modèle d'erreur et sur son utilisation, consultez le Guide de conception d'API.
| Code | Énumération | Code d'état HTTP | Description | Action recommandée |
|---|---|---|---|---|
| 1 | CANCELLED |
499 Client Closed Request |
L'opération a été annulée, généralement par l'appelant. | Réexécutez l'opération. |
| 2 | UNKNOWN |
500 Internal Server Error |
Cette erreur peut s'afficher lorsqu'une valeur Status reçue d'un autre espace d'adressage appartient à un espace d'erreur inconnu dans cet espace d'adressage. Si l'erreur d'API ne renvoie pas suffisamment d'informations, elle peut être convertie en cette erreur. |
Réessayez avec un intervalle exponentiel entre les tentatives. |
| 3 | INVALID_ARGUMENT |
400 Bad Request |
Le client a spécifié un argument non valide. Cette erreur diffère de FAILED_PRECONDITION. INVALID_ARGUMENT indique les arguments problématiques quel que soit l'état du système (par exemple, un nom de fichier mal formé). |
Ne relancez pas la requête avant d'avoir résolu le problème. |
| 4 | DEADLINE_EXCEEDED |
504 Gateway Timeout |
Le délai a expiré avant que l'opération puisse se terminer. Pour les opérations qui modifient l'état du système, cette erreur peut être affichée même si l'opération s'est terminée avec succès. Par exemple, une réponse réussie d'un serveur aurait pu être retardée suffisamment longtemps pour que le délai expire. | Réessayez avec un intervalle exponentiel entre les tentatives. |
| 5 | NOT_FOUND |
404 Not Found |
Une entité demandée, telle qu'une ressource FHIR, est introuvable. | Ne relancez pas la requête avant d'avoir résolu le problème. |
| 6 | ALREADY_EXISTS |
409 Conflict |
L'entité qu'un client a tenté de créer, telle qu'une instance DICOM, existe déjà. | Ne relancez pas la requête avant d'avoir résolu le problème. |
| 7 | PERMISSION_DENIED |
403 Forbidden |
L'appelant n'a pas l'autorisation d'exécuter l'opération spécifiée. Ce code d'erreur n'implique pas que la requête soit valide, que l'entité demandée existe ou qu'elle réponde à d'autres conditions préalables. | Ne relancez pas la requête avant d'avoir résolu le problème. |
| 8 | RESOURCE_EXHAUSTED |
429 Too Many Requests |
Une ressource a été épuisée, par exemple un quota par projet. | Réessayez avec un intervalle exponentiel entre les tentatives. Le quota peut devenir disponible au fil du temps. |
| 9 | FAILED_PRECONDITION |
400 Bad Request |
L'opération a été rejetée car le système n'est pas dans un état requis pour exécuter l'opération. Par exemple, le répertoire à supprimer n'est pas vide ou une opération rmdir est appliquée à un emplacement qui n'est pas un répertoire. |
Ne relancez pas la requête avant d'avoir résolu le problème. |
| 10 | ABORTED |
409 Conflict |
L'opération a été abandonnée, généralement en raison d'un problème de simultanéité, tel qu'un échec de vérification du séquenceur ou un abandon de transaction. | Réessayez avec un intervalle exponentiel entre les tentatives. |
| 11 | OUT_OF_RANGE |
400 Bad Request |
L'opération a été tentée au-delà de la plage valide (par exemple, rechercher ou lire après la fin du fichier). Contrairement à INVALID_ARGUMENT, cette erreur indique un problème pouvant être résolu si l'état du système change. |
Ne relancez pas la requête avant d'avoir résolu le problème. |
| 12 | UNIMPLEMENTED |
501 Not Implemented |
L'opération n'est pas mise en œuvre ou n'est pas prise en charge/activée dans l'API Drive. | Ne pas réessayer. |
| 13 | INTERNAL |
500 Internal Server Error |
Erreurs internes. Cela indique qu'une erreur inattendue s'est produite lors du traitement dans le système sous-jacent. | Réessayez avec un intervalle exponentiel entre les tentatives. |
| 14 | UNAVAILABLE |
503 Service Unavailable |
L'API Drive n'est pas disponible. Il s'agit probablement d'une condition temporaire qui peut être corrigée en réessayant avec un intervalle exponentiel entre les tentatives. Notez qu'il n'est pas toujours sûr de relancer des opérations non idempotentes. | Réessayez avec un intervalle exponentiel entre les tentatives. |
| 15 | DATA_LOSS |
500 Internal Server Error |
Perte ou corruption de données irrécupérable. | Contactez votre administrateur système. L'administrateur système peut contacter un représentant de l'assistance en cas de perte ou de corruption de données. |
| 16 | UNAUTHENTICATED |
401 Unauthorized |
La requête ne dispose pas d'identifiants d'authentification valides pour l'opération. | Ne relancez pas la requête avant d'avoir résolu le problème. |