در زیر خلاصهای از مشخصات API مربوط به Bundle Builder، شامل تعاریف 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 مربوط به bundle، پارامتر میتواند از طریق یک پارامتر query ارائه شود، به عنوان مثال ?name=david . این پارامتر میتواند در داخل یک مقدار QueryDefinition (به زیر مراجعه کنید) ( $name ) برای ایجاد پویای bundleها استفاده شود.
رابط تعریف پرس و جو
از تعریف پرسوجو برای ایجاد پرسوجوهای نامگذاریشده روی بسته استفاده میشود. هر شیء درون نقشه 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'] },