Unten 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 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 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";
};
Beispiel:
params: {
name: {
required: true,
type: 'string',
}
}
Wenn Sie eine Anfrage an den HTTP-Endpunkt für das Bundle senden, kann der Parameter über einen Abfrageparameter angegeben werden, z.B. ?name=david
. Der Parameter kann innerhalb eines QueryDefinition
-Werts (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
-Zuordnung wird eine neue benannte Abfrage erstellt, wobei der Objektschlüssel als Name verwendet wird. In jeder Anfrage muss eine Sammlung und optional eine Liste der auszuführenden Anfragebedingungen 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
-Schnittstellen enthalten. Jedes Element im Array darf nur eine 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 mit dem Namen „products“ für eine products
-Sammlung mit einer „where“- und einer „limit“-Bedingung erstellen möchten, sollte die Datenausgabe der Struktur so aussehen:
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 als Wert angeben, da geschachtelte Arraywerte in Firestore nicht unterstützt werden. Beispiel:
{ where: ['category', 'in', 'womens,shorts'] }, // ['womens', 'shorts']
Jeder Zahlenwert wird als Zahl geparst. Wenn jedoch ein String-Zahlenwert erforderlich ist, sollte 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 ein Parameter type
definiert ist (siehe oben), kann er einem Bedingungswert zugewiesen werden, um dynamische Datenpakete über die Syntax $
bereitzustellen:
// ?type=featured
conditions: [
{ where: ['type', '==', '$type'] },