아래는 TypeScript 정의 및 자세한 설명이 포함된 Bundle Builder API 사양의 개요입니다.
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'라는 쿼리를 만들려면 데이터 구조 출력이 다음과 일치해야 합니다.
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'] },