ด้านล่างมีภาพรวมของข้อกำหนดสำหรับ 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" ในคอลเล็กชัน products
ที่มีเงื่อนไข where และ limit เอาต์พุตของโครงสร้างข้อมูลควรตรงกับรูปแบบต่อไปนี้
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'] },