API Referansı

Aşağıda, TypeScript tanımları ve ayrıntılı açıklamalar da dahil olmak üzere Bundle Builder API'nin özelliklerine genel bir bakış sunulmaktadır.

BundleDocument Arayüzü

Yapılandırılmış koleksiyondaki tek bir dokümanın spesifikasyonu:

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 Arayüzü

BundleDocument içinde tanımlanan tek bir parametrenin spesifikasyonu.

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

Örneğin, takip parametresi şöyleyse:

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

Paket HTTP uç noktasına istek gönderirken parametre, ?name=david gibi bir sorgu parametresi aracılığıyla sağlanabilir. Parametre, dinamik olarak paketleri oluşturmak için QueryDefinition (aşağıya bakın) değeri ($name) içinde kullanılabilir.

QueryDefinition Arayüzü

Pakette adlandırılmış sorgular oluşturmak için sorgu tanımı kullanılır. queries eşlemesindeki her nesne, ad olarak nesne anahtarını kullanıp yeni bir adlandırılmış sorgu oluşturur. Her sorgu bir koleksiyon ve isteğe bağlı olarak da gerçekleştirilecek sorgu koşullarının bir listesini belirtmelidir.

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

conditions parametresi bir dizi QueryCondition arayüzü içerebilir. Dizideki her öğe yalnızca tek bir koşul içermelidir.

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

Örneğin, bir products koleksiyonunda where ve limit koşulu içeren "ürünler" adlı bir sorgu oluşturmak için veri yapısı çıkışı aşağıdakiyle eşleşmelidir:

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

in, not-in veya array-contains-any filtrelerine dizi değerleri sağlarken, Firestore'da iç içe dizi değerleri desteklenmediğinden virgülle ayrılmış bir değer sağlamanız gerekir. Örneğin:

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

Tüm sayı değerleri sayı olarak ayrıştırılır. Ancak dize sayı değeri gerekiyorsa paranteze alınmalıdır:

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

Koşullar, parametrelerle birlikte de kullanılabilir. Örneğin, bir type parametresi tanımlanmışsa (yukarıya bakın) bu parametre, $ söz dizimi aracılığıyla dinamik veri paketleri sağlamak için bir koşul değerine sağlanabilir:

// ?type=featured


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