API 참조

아래는 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'] },