הפניית API

להלן סקירה כללית של המפרטים עבור ה-Bundle Builder API, כולל הגדרות TypeScript ותיאורים מפורטים.

ממשק BundleDocument

המפרט עבור מסמך בודד בתוך האוסף המוגדר:

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

המפרט של פרמטר בודד המוגדר ב- 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";
};

לדוגמה, בהינתן הפרמטר הבא:

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

בעת ביצוע בקשה לנקודת הקצה של חבילת HTTP, ניתן לספק את הפרמטר באמצעות פרמטר שאילתה, למשל ?name=david . ניתן להשתמש בפרמטר בתוך ערך QueryDefinition (ראה להלן) ( $name ) כדי ליצור חבילות באופן דינמי.

ממשק QueryDefinition

הגדרת שאילתה משמשת ליצירת שאילתות עם שם בחבילה. כל אובייקט במפת queries ייצור שאילתה חדשה בשם, תוך שימוש במפתח האובייקט כשם. כל שאילתה חייבת לציין אוסף, ולחלופין רשימה של תנאי שאילתה לביצוע.

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 יכול להכיל מערך של ממשקי QueryCondition . כל פריט במערך חייב לכלול רק תנאי בודד.

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

לדוגמה, כדי ליצור שאילתה בשם "מוצרים" על אוסף products עם תנאי איפה ומגבלה, פלט מבנה הנתונים צריך להתאים לפרטים הבאים:

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

כאשר מספקים ערכי מערך למסננים in , not-in או array-contains-any , עליך לספק ערך מופרד בפסיק מכיוון שהערך כערכי מערך מקוננים אינם נתמכים ב-Firestore. לדוגמה:

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

כל ערך מספר ינותח כמספר, אולם אם נדרש ערך מספר מחרוזת, יש לעטוף אותו בסוגריים:

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

ניתן להשתמש בתנאים גם לצד פרמטרים. לדוגמה, אם מוגדר type פרמטר (ראה לעיל), ניתן לספק אותו לערך תנאי כדי לספק חבילות נתונים דינמיים באמצעות תחביר $ :

// ?type=featured


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