API Referansı

Aşağıda, TypeScript tanımları ve ayrıntılı açıklamalar da dahil olmak üzere Bundle Builder API'sinin teknik özelliklerine ilişkin bir genel bakış yer almaktadır.

BundleDocument Arayüzü

Yapılandırılmış koleksiyon içindeki tek bir belgenin 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;
};

Parametre Tanımlama Arayüzü

BundleDocument tanımlanan tek bir parametrenin belirtimi.

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, aşağıdaki parametre verildiğinde:

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

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

Sorgu Tanımı Arayüzü

Pakette adlandırılmış sorgular oluşturmak için bir sorgu tanımı kullanılır. queries haritasındaki her nesne, ad olarak nesne anahtarını kullanarak yeni bir adlandırılmış sorgu oluşturacaktır. Her sorgunun bir koleksiyon ve isteğe bağlı olarak gerçekleştirilecek sorgu koşullarının bir listesini belirtmesi gerekir.

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 arabirimi 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 nerede ve sınır koşuluyla "ürünler" adlı bir sorgu oluşturmak için veri yapısı çıktısının aşağıdakilerle eşleşmesi gerekir:

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 değer virgülle ayrılmış bir değer sağlamanız gerekir. Örneğin:

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

Herhangi bir sayı değeri sayı olarak ayrıştırılacaktır, ancak bir dize numarası değeri gerekiyorsa parantez içine alınmalıdır:

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

Koşullar parametrelerin yanında da kullanılabilir. Örneğin, bir parametre type tanımlanmışsa (yukarıya bakın), $ sözdizimi yoluyla dinamik veri paketleri sağlamak için bu bir koşul değerine sağlanabilir:

// ?type=featured


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