Referensi API

Di bawah ini terdapat ringkasan spesifikasi untuk Bundle Builder API, termasuk definisi TypeScript & deskripsi mendetail.

Antarmuka BundleDocument

Spesifikasi untuk satu dokumen dalam koleksi yang dikonfigurasi:

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;
};

Antarmuka ParamDefinition

Spesifikasi parameter tunggal yang ditentukan dalam BundleDocument.

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";
};

Misalnya, dengan parameter berikut:

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

Saat membuat permintaan ke endpoint HTTP paket, parameter dapat diberikan melalui parameter kueri, misalnya ?name=david. Parameter dapat digunakan dalam nilai QueryDefinition (lihat di bawah) ($name) untuk membuat paket secara dinamis.

Antarmuka QueryDefinition

Definisi kueri digunakan untuk membuat kueri yang diberi nama pada paket. Setiap objek dalam peta queries akan membuat kueri bernama baru, menggunakan kunci objek sebagai namanya. Setiap kueri harus menentukan koleksi, dan secara opsional daftar kondisi kueri yang akan dijalankan.

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

Parameter conditions dapat berisi array antarmuka QueryCondition. Setiap item dalam array hanya boleh menyertakan satu kondisi.

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;
};

Misalnya, untuk membuat kueri bernama "produk" di koleksi products dengan kondisi tempat dan batas, output struktur data harus cocok dengan hal berikut:

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

Saat memberikan nilai array ke filter in, not-in, atau array-contains-any, Anda harus memberikan nilai yang dipisahkan koma sebagai nilai tersebut karena nilai array bertingkat tidak didukung di Firestore. Contoh:

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

Setiap nilai angka akan diurai sebagai angka, tetapi jika nilai angka string diperlukan, nilai tersebut harus digabungkan dalam tanda kurung:

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

Kondisi juga dapat digunakan bersama parameter. Misalnya, jika parameter type ditentukan (lihat di atas), parameter ini dapat diberikan ke nilai kondisi untuk memberikan paket data dinamis melalui sintaksis $:

// ?type=featured


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