API-Referenz

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

BundleDocument-Benutzeroberfläche

Die Spezifikation für ein einzelnes Dokument in 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 Angabe 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";
};

Beispiel:

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

Wenn Sie eine Anfrage an den HTTP-Endpunkt des Bundles senden, kann der Parameter über einen Suchparameter angegeben werden, z.B. ?name=david. Der Parameter kann in einem QueryDefinition-Wert (siehe unten) ($name) verwendet werden, um Bundles dynamisch zu erstellen.

Schnittstelle „QueryDefinition“

Mit einer Abfragedefinition werden benannte Abfragen für das Bundle erstellt. Für jedes Objekt in der queries-Map wird eine neue benannte Abfrage erstellt, wobei der Objektschlüssel als Name verwendet wird. Für jede Abfrage muss eine Sammlung und optional eine Liste der auszuführenden Abfragebedingungen angegeben werden.

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-Benutzeroberflächen enthalten. Jedes Element im Array darf nur eine einzige 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;
};

Wenn Sie beispielsweise eine Abfrage namens „Produkte“ für eine products-Sammlung mit einer WHERE- und LIMIT-Bedingung erstellen möchten, sollte die Datenstrukturausgabe der folgenden entsprechen:

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

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

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

Alle Zahlenwerte werden als Zahl geparst. Wenn jedoch ein String mit einem Zahlenwert erforderlich ist, muss er in Klammern gesetzt werden:

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

Bedingungen können auch zusammen mit Parametern verwendet werden. Wenn beispielsweise der Parameter type definiert ist (siehe oben), kann er einem Bedingungswert übergeben werden, um dynamische Datenpakete über die $-Syntax bereitzustellen:

// ?type=featured


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