Utiliser des masques de champ

Les masques de champ permettent aux appelants d'API de répertorier les champs qu'une requête doit renvoyer ou mettre à jour. L'utilisation de FieldMask permet à l'API d'éviter des tâches inutiles et d'améliorer les performances. Un masque de champ est utilisé pour les méthodes de lecture et de mise à jour de l'API Google Slides.

Lire avec un masque de champ

Les présentations peuvent être volumineuses et, bien souvent, vous n'avez pas besoin que chaque élément de la ressource Presentation soit renvoyé par une requête de lecture. Vous pouvez limiter le contenu renvoyé dans une réponse de l'API Slides à l'aide du paramètre d'URL fields. Pour des performances optimales, n'indiquez explicitement que les champs dont vous avez besoin dans la réponse.

Le format du paramètre "fields" est identique à celui de l'encodage JSON d'un paramètre FieldMask. En bref, plusieurs champs différents sont séparés par une virgule et les sous-champs sont séparés par un point. Les noms des champs peuvent être spécifiés en camelCase ou en Separate_by_underscores. Pour plus de commodité, vous pouvez placer plusieurs sous-champs du même type entre parenthèses.

L'exemple de requête presentations.get suivant utilise un masque de champ slides.pageElements(objectId,size,transform) pour récupérer uniquement l'ID d'objet, Size et la transformation d'un objet pageElement sur toutes les diapositives d'une présentation:

GET https://slides.googleapis.com/v1/presentations/presentationId?fields=slides.pageElements(objectId,size,transform)

La réponse à cet appel de méthode est un objet Presentation contenant les composants demandés dans le masque de champ:

{
  "slides": [
    {
      "pageElements": [
        {
          "objectId": "OBJECT_ID",
          "size": {
            "width": {
              "magnitude": 3000000,
              "unit": "EMU"
            },
            "height": {
              "magnitude": 3000000,
              "unit": "EMU"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1
            "translateX": 311708,
            "translateY": 744575,
            "unit": "EMU"
          }
        },
        {
          "objectId": "OBJECT_ID",
          "size": {
            "width": {
              "magnitude": 3000000,
              "unit": "EMU"
            },
            "height": {
              "magnitude": 3000000,
              "unit": "EMU"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1
            "translateX": 311700,
            "translateY": 2834125,
            "unit": "EMU"
          }
        }
     ]
    }
  ]
}

Mettre à jour avec un masque de champ

Parfois, vous ne devez mettre à jour que certains champs d'un objet, tout en laissant les autres champs inchangés. Les requêtes de mise à jour dans une opération presentations.batchUpdate utilisent des masques de champ pour indiquer à l'API quels champs sont modifiés. La requête de mise à jour ignore tous les champs qui ne sont pas spécifiés dans le masque de champ, et les conserve avec leurs valeurs actuelles.

Vous pouvez également annuler la définition d'un champ en l'ajoutant au masque plutôt qu'en le spécifiant dans le message mis à jour. Cette opération efface la valeur précédemment attribuée au champ.

La syntaxe des masques de champ de mise à jour est la même que celle des masques de champ de lecture.

L'exemple suivant utilise UpdateShapePropertiesRequest pour remplacer le remplissage des couleurs d'une forme par la couleur du thème DARK1 et annuler la définition du contour de la forme:

POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{
  "requests": [
    {
      "updateShapeProperties": {
        "objectId": OBJECT_ID,
        "shapeProperties": {
          "shapeBackgroundFill": {
            "solidFill": {
              "color": {
                "themeColor": "DARK1"
              }
            }
          }
        },
        "fields": "shapeBackgroundFill.solidFill.color,outline"
      }
    }
  ]
}