Używanie masek pól

Maski pól to sposób na podanie przez wywołujących interfejs API listy pól, które żądanie powinno zwrócić lub zaktualizować. Korzystanie z FieldMask pozwala interfejsowi API uniknąć niepotrzebnej pracy i zwiększa wydajność. Maska pola jest używana zarówno w metodach odczytu, jak i aktualizacji w interfejsie Google Docs API.

Odczytywanie z maską pola

Dokumenty mogą być duże i często nie potrzebujesz wszystkich części zasobu Document zwróconego przez żądanie odczytu. Za pomocą parametru URL fields możesz ograniczyć zakres zwracanych danych w odpowiedzi interfejsu Docs API. Aby uzyskać najlepsze wyniki, w odpowiedzi podaj tylko te pola, których potrzebujesz.

Format parametru fields jest taki sam jak kodowanie JSON obiektu FieldMask. Krótko mówiąc, wiele różnych pól jest rozdzielanych przecinkami, a pola podrzędne są rozdzielane kropkami. Nazwy pól mogą być podane w sposób wielka_litera_z_małą lub oddzielone_podkreśleniem. Dla wygody możesz podać w nawiasach wiele pól podrzędnych tego samego typu.

W tym przykładzie zapytania documents.get użyto maski pola title,tabs(documentTab(body.content(paragraph))),revisionId, aby pobrać title dokumentu, Paragraph obiektu Body (ze wszystkich kart) oraz revisionId dokumentu:

GET https://docs.googleapis.com/v1/documents/documentId?fields=title,tabs(documentTab(body.content(paragraph))),revisionId

Odpowiedzią na to wywołanie metody jest obiekt Document zawierający komponenty określone w masce pola:

{
  "title": "TITLE",
  "revisionId": "REVISION_ID",
  "tabs": [
    {
      "documentTab": {
        "body": {
          "content": [
            {},
            {
              "paragraph": {
                "elements": [
                  {
                    "startIndex": 1,
                    "endIndex": 59,
                    "textRun": {
                      "content": "CONTENT",
                      "textStyle": {}
                    }
                  }
                ],
                "paragraphStyle": {
                  "namedStyleType": "NORMAL_TEXT",
                  "direction": "LEFT_TO_RIGHT"
                }
              }
            }
          ]
        }
      }
    }
  ]
}

Aktualizacja za pomocą maski pola

Czasami trzeba zaktualizować tylko niektóre pola obiektu, pozostawiając inne bez zmian. Żądania aktualizowania w ramach operacji documents.batchUpdate używają masek pól, aby poinformować interfejs API, które pola mają zostać zmienione. Żądanie aktualizacji ignoruje pola, które nie są określone w masce pola, pozostawiając ich bieżące wartości.

Możesz też zresetować pole, nie określając go w zaktualizowanej wiadomości, ale dodając do maski. Spowoduje to usunięcie wartości, która była wcześniej w polu.

Składnia mask pól do aktualizowania jest taka sama jak w przypadku mask pól do odczytu.

W tym przykładzie użyto UpdateTextStyleRequest, aby nadać wyrazom „Google Docs API” w dokumencie styl pogrubienia w zakresie range 5–20:

POST https://docs.googleapis.com/v1/documents/documentId:batchUpdate
{
  "title": "TITLE",
  "revisionId": "REVISION_ID",
  "suggestionsViewMode": "SUGGESTIONS_INLINE",
  "documentId": "DOCUMENT_ID",
  "tabs": [
    {
      "documentTab": {
        "body": {
          "content": [
            {
              "endIndex": 1,
              "sectionBreak": {
                "sectionStyle": {
                  "columnSeparatorStyle": "NONE",
                  "contentDirection": "LEFT_TO_RIGHT",
                  "sectionType": "CONTINUOUS"
                }
              }
            },
            {
              "startIndex": 1,
              "endIndex": 59,
              "paragraph": {
                "elements": [
                  {
                    "startIndex": 1,
                    "endIndex": 5,
                    "textRun": {
                      "content": "CONTENT",
                      "textStyle": {}
                    }
                  },
                  {
                    "startIndex": 5,
                    "endIndex": 20,
                    "textRun": {
                      "content": "CONTENT",
                      "textStyle": {
                        "bold": true
                      }
                    }
                  },
                  {
                    "startIndex": 20,
                    "endIndex": 59,
                    "textRun": {
                      "content": "CONTENT",
                      "textStyle": {}
                    }
                  }
                ],
                "paragraphStyle": {
                  "namedStyleType": "NORMAL_TEXT",
                  "direction": "LEFT_TO_RIGHT"
                }
              }
            }
          ]
        },
        {
          ... // style details
        },
      }
    }
  ],
}