API-Referenz

Nachfolgend finden Sie eine Übersicht über die Spezifikationen für die Bundle Builder-API, einschließlich TypeScript-Definitionen und detaillierter Beschreibungen.

BundleDocument-Schnittstelle

Die Spezifikation für ein einzelnes Dokument innerhalb der konfigurierten Sammlung:

type BundleDocument = {
  // A list of document IDs to serve in the bundle.
  docs?: Array<string>;
  // A map containing individual named queries and their definitions.
  queries?: Map<string, QueryDefinition[]>;
  // A map of parameters and their definitions, which can be provided to a query definition.
  params?: Map<string, ParamDefinition>;
  // Specifies how long to keep the bundle in the client's cache, in seconds. If not defined, client-side cache is disabled.
  clientCache?: string;
  // Only used in combination with Firebase Hosting. Specifies how long to keep the bundle in Firebase Hosting CDN cache, in seconds.
  serverCache: string;
  // Specifies how long (in seconds) to keep the bundle in a Cloud Storage bucket, in seconds. If not defined, Cloud Storage bucket is not accessed.
  fileCache?: string;
  // If a 'File Cache' is specified, bundles created before this timestamp will not be file cached.
  notBefore?: Timestamp;
};

ParamDefinition-Schnittstelle

Die Spezifikation eines einzelnen Parameters, der in einem BundleDocument definiert ist.

type ParamDefinition = {
  // Whether this parameter is required. If not provided as a query string, an error will be thrown.
  required: boolean;
  // The type of value which will be parsed, defaults to 'string'.
  type?:
    | "string"
    | "integer"
    | "float"
    | "boolean"
    | "string-array"
    | "integer-array"
    | "float-array";
};

Zum Beispiel mit dem folgenden Parameter:

params: {
  name: {
    required: true,
    type: 'string',
  }
}

Bei einer Anfrage an den Bundle-HTTP-Endpunkt kann der Parameter über einen Abfrageparameter bereitgestellt werden, z. B. ?name=david . Der Parameter kann innerhalb eines QueryDefinition Werts (siehe unten) ( $name ) verwendet werden, um Bundles dynamisch zu erstellen.

QueryDefinition-Schnittstelle

Eine Abfragedefinition wird verwendet, um benannte Abfragen für das Bundle zu erstellen. Jedes Objekt in der queries erstellt eine neue benannte Abfrage, wobei der Objektschlüssel als Name verwendet wird. Jede Abfrage muss eine Sammlung und optional eine Liste der auszuführenden Abfragebedingungen angeben.

type QueryDefinition = {
  // The collection to perform the query on.
  collection: string;
  // An optional list of conditions to perform on the specified collection.
  conditions?: QueryCondition[];
};

Der Parameter conditions kann ein Array von QueryCondition Schnittstellen enthalten. Jedes Element im Array darf nur eine einzelne Bedingung enthalten.

type QueryCondition = {
  // Performs a `where` filter on the collection on a given FieldPath, operator and value.
  where?: [
    string,
    (
      | "<"
      | "<="
      | "=="
      | ">="
      | ">"
      | "!="
      | "array-contains"
      | "in"
      | "not-in"
      | "array-contains-any"
    ),
    any
  ];
  orderBy?: [string, ("asc" | "desc")?];
  limit?: number;
  limitToLast?: number;
  offset?: number;
  startAt?: string;
  startAfter?: string;
  endAt?: string;
  endBefore?: string;
};

Um beispielsweise eine Abfrage mit dem Namen „Produkte“ für eine products mit einer „Where“- und „Limit“-Bedingung zu erstellen, sollte die Datenstrukturausgabe mit Folgendem übereinstimmen:

queries: {
  products: {
    collection: 'products',
    conditions: [
      { where: ['type', '==', 'featured'] },
      { limit: 10 },
    ],
  }
}

Wenn Sie Array-Werte für die Filter „ in , not-in “ oder array-contains-any bereitstellen, müssen Sie einen durch Kommas getrennten Wert angeben, da verschachtelte Array-Werte in Firestore nicht unterstützt werden. Zum Beispiel:

{ where: ['category', 'in', 'womens,shorts'] }, // ['womens', 'shorts']

Jeder Zahlenwert wird als Zahl geparst. Wenn jedoch ein Zeichenfolgenzahlenwert erforderlich ist, sollte dieser in Klammern eingeschlossen werden:

{ where: ['price', 'in', '1,2.5'] }, // [1, 2.5]
{ where: ['price', 'in', '"1","2.5"'] }, // ['1', '2.5']

Neben Parametern können auch Bedingungen verwendet werden. Wenn beispielsweise ein type definiert ist (siehe oben), kann dieser einem Bedingungswert bereitgestellt werden, um dynamische Datenbündel über die $ -Syntax bereitzustellen:

// ?type=featured


    conditions: [
      { where: ['type', '==', '$type'] },