TypeScript v1 객체와 링크 API
프로젝트에 가져온 온톨로지 객체 유형과 링크 유형은 TSv1 코드 바인딩으로 생성됩니다. TSv2와 Python은 이 API 대신 생성 OSDK를 사용합니다.
속성 읽기와 배열
온톨로지 속성의 API 이름이 코드 필드 이름이 됩니다. employee.firstName처럼 점 표기법으로 읽습니다. 값이 없을 수 있으므로 기본 키처럼 필수인 속성을 제외한 속성은 undefined를 처리해야 합니다.
배열 속성은 ReadonlyArray입니다. 편집할 때는 복사하여 수정한 뒤 편집 함수에서 전체 배열을 속성에 다시 대입합니다.
const values = [...(myObject.myArrayProperty ?? [])];
values.push(newItem);
myObject.myArrayProperty = values;
위 코드의 myObject는 편집 대상 객체, myArrayProperty는 배열 속성, newItem은 그 원소 타입의 값입니다. TSv2가 배열을 일반 T[]로 노출하거나 Python이 list로 노출하더라도 편집을 기록하려면 새 배열 값을 전체 속성에 넣어야 합니다.
단일 링크와 다중 링크
링크도 온톨로지 API 이름을 필드 이름으로 사용합니다.
| 링크에서 접근하는 쪽 | 바인딩 | 로드 메서드 | 연결 없음 |
|---|---|---|---|
| 일대일 또는 다대일의 1 쪽 | SingleLink | get(), getAsync() | undefined |
| 일대다 또는 다대다의 many 쪽 | MultiLink | all(), allAsync() | 빈 배열 |
예를 들어 employee.manager.get()은 상사 하나를 반환하고 employee.reports.all()은 보고자 목록을 반환합니다. 비동기 메서드는 같은 조회의 Promise를 제공합니다.
연결 객체 배열은 ReadonlyArray이므로 로컬 목록을 바꾸려면 [...employee.reports.all()]처럼 복사합니다. 목록 복사본을 수정하는 것과 온톨로지 관계를 수정하는 것은 별개의 동작입니다.
링크 조회는 백엔드에서 연결된 객체를 읽으므로 반복 호출 비용이 생깁니다. 집계나 추가 필터만 필요하면 객체 인스턴스를 모두 로드하지 않고 객체 집합을 탐색할 수 있습니다.
객체 집합으로 탐색
가상의 Employee.reports 링크를 가져오면 employee 집합에 대응하는 searchAroundReports 메서드를 생성한다고 가정합니다.
import { Function } from "@foundry/functions-api";
import { Employee, Objects, ObjectSet } from "@foundry/ontology-api";
export class LinkSearchFunctions {
@Function()
public reportsOf(employee: Employee): ObjectSet<Employee> {
return Objects.search().employee([employee]).searchAroundReports();
}
}
MultiLink를 그대로 ObjectSet으로 변환하는 API는 없습니다. 단일 객체에서 시작하려면 위처럼 객체를 집합으로 만든 뒤 탐색합니다. 기본 키를 알고 있으면 employee().filter(...)로 처음부터 검색 집합을 구성하는 편이 단일 객체를 집합에 넣는 방식보다 빠를 수 있습니다.
생성된 Search Around의 정확한 이름은 가져온 링크 바인딩을 확인합니다. 객체 집합 API에서 탐색 깊이와 로드 한도를 설명합니다.
객체 속성 메타데이터
TSv1은 객체 유형 상수의 properties로 속성 타입 정보를 제공합니다. 예를 들어 다음 값은 Employee.firstName의 메타데이터이며 firstName이 String이면 StringPropertyBaseType입니다.
import { Employee } from "@foundry/ontology-api";
const firstNameMetadata = Employee.properties.firstName;
메타데이터로 특정 타입의 속성을 찾거나, 입력받은 속성 이름이 기대한 타입인지 확인할 수 있습니다. 이 TSv1 메타데이터 API에 대응하는 TSv2 또는 Python API는 없습니다.
지원 메타데이터 타입은 다음과 같습니다.
| 속성 계열 | 메타데이터 타입 |
|---|---|
| Boolean | BooleanPropertyBaseType |
| Byte, Short, Integer, Long | BytePropertyBaseType, ShortPropertyBaseType, IntegerPropertyBaseType, LongPropertyBaseType |
| Float, Double, Decimal | FloatPropertyBaseType, DoublePropertyBaseType, DecimalPropertyBaseType |
| Date, Timestamp | DatePropertyBaseType, TimestampPropertyBaseType |
| String | StringPropertyBaseType |
| Geopoint | GeohashPropertyBaseType. 이전 geopoint 명칭인 geohash가 타입 이름에 남아 있습니다. |
| Array | ArrayPropertyBaseType |
| Vector | VectorPropertyBaseType |