여러 객체 유형으로 객체 집합 로드(Load Object Set Multiple Object Types) (V2)
여러 객체 유형 또는 인터페이스 범위를 가진 객체 집합을 읽습니다. 이 API는 미리보기 기능이며 변경되거나 제거될 수 있습니다. 호출할 때 preview=true를 지정합니다.
객체 유형 범위에서는 그 유형에서 선택한 속성을 반환합니다. 인터페이스 범위에서는 인터페이스 속성을 구현하는 객체 유형의 속성만 반환하고, 이를 해석할 인터페이스 매핑을 함께 제공합니다. 메타데이터는 $ 접두사를 사용합니다.
null 속성은 생략하며 벡터는 select에 명시해야 반환합니다. pageSize는 상한이며 객체 크기 때문에 페이지가 작아질 수 있습니다. 다음 토큰이 있으면 계속 조회합니다. OSv1 기반 객체는 누적 최대 10,000개를 반환합니다. 10,000개를 반환한 뒤 결과가 더 남은 상태에서 다음 페이지를 요청하면 ObjectsExceededLimit이 발생합니다. OSv2에는 이 누적 제한을 적용하지 않습니다.
HTTP 요청
POST /api/v2/ontologies/{ontology}/objectSets/loadObjectsMultipleObjectTypes
작업 식별자는 v2.loadObjectSetV2MultipleObjectTypes입니다. OAuth2로 호출하는 타사 애플리케이션에는 api:ontologies-read 권한 범위가 필요합니다. 각 요청에 Authorization: Bearer <접근 토큰>을 전달합니다.
경로 매개변수
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
ontology | string | 필수 | 온톨로지의 API 이름 또는 RID입니다. List Ontologies 또는 Ontology Manager에서 확인합니다. | palantir |
쿼리 매개변수
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
sdkPackageRid | string | 선택 | 생성된 SDK 패키지의 RID입니다. | |
sdkVersion | string | 선택 | 생성된 SDK 패키지의 버전입니다. | |
branch | string | 선택 | 조회할 Foundry 브랜치입니다. 생략하면 기본 브랜치를 사용합니다. 브랜치는 실험적 기능이며 일부 작업 경로는 지원하지 않습니다. | ri.branch..branch.d827184f-ee0e-4351-8b70-efbe51e07252 |
transactionId | string | 선택 | 읽을 온톨로지 트랜잭션 ID입니다. 트랜잭션은 실험적 기능이며 일부 작업 경로는 지원하지 않을 수 있습니다. | |
scenarioRid | string | 선택 | 객체 집합을 읽을 온톨로지 시나리오의 RID입니다. | ri.actions..scenario.a1b2c3d4-e5f6-7890-abcd-ef1234567890 |
preview | boolean | 선택 | true이면 미리보기 단계의 베타 기능을 사용합니다. | true |
executeInMemoryOnly | boolean | 선택 | true이면 메모리 안에서 계산할 수 없는 요청을 오류로 종료합니다. 더 무거운 계산이 필요한 요청을 빠르게 실패시키는 옵션이며 기본값은 false입니다. |
요청 본문
본문 형식은 LoadObjectSetV2MultipleObjectTypesRequest이며 필수입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
objectSet | ObjectSet | 필수 | 온톨로지의 객체 집합 정의입니다. | |
orderBy | object | 선택 | 속성 또는 관련도로 결과를 정렬합니다. fields를 제공하면 orderType은 fields로 설정됩니다. 전체 orderBy를 생략하면 순서를 지정하지 않습니다. relevance는 텍스트 검색 또는 최근접 이웃의 일치 정도에 따른 점수 내림차순이며, 그 밖의 질의에서는 순서를 지정하지 않습니다. 관련도 정렬은 페이지 사이의 순서를 보장하지 않아 중복이나 누락이 발생할 수 있습니다. 완전성이 필요하면 한 페이지 범위에서 처리합니다. 비용이 클 수 있으므로 필요한 경우에 사용합니다. | |
select | list<SelectedPropertyApiName> | 선택 | ||
selectV2 | list<PropertyIdentifier> | 선택 | 반환할 속성의 식별자 목록입니다. select와 selectV2 중 하나만 지정합니다. | |
defaultLoadLevel | LoadLevel | 선택 | 배열 축약, 구조체의 주 값 추출, 두 작업의 결합 또는 원본 값 반환을 지정하는 로드 수준입니다. | |
loadOntologyDefinedDerivedProperties | boolean | 선택 | 온톨로지 정의 파생 속성(OTDP)의 반환 여부이며 기본값은 true입니다. select/selectV2를 명시하면 플래그와 관계없이 선택한 속성을 반환합니다. 객체 유형의 OTDP로 구현된 인터페이스 속성에도 이 플래그는 영향을 주지 않습니다. 실험적 기능이며 아직 일반 제공 기능이 아닙니다. | |
pageToken | string | 선택 | 페이지 조회를 시작할 위치입니다. 첫 요청에서는 생략하고, 다음 요청에서는 직전 응답의 nextPageToken을 pageToken으로 전달합니다. | |
pageSize | integer | 선택 | 요청할 페이지 크기입니다. | |
excludeRid | boolean | 선택 | $rid 속성을 읽지 않도록 합니다. OSv2 객체 유형에서는 성능이 개선될 수 있습니다. | |
loadPropertySecurities | boolean | 선택 | 모든 속성의 보안 정보를 읽습니다. true이면 응답의 propertySecurities에 보안 정보 목록을 반환하고, 각 속성은 데이터와 그 목록의 인덱스를 담은 Secured Property Value로 반환합니다. 실험적 기능이며 아직 일반 제공 기능이 아닙니다. | |
snapshot | boolean | 선택 | 페이지 조회에 스냅샷 일관성을 사용할지 지정합니다. true이면 페이지 조회를 시작하기 전의 일관된 상태를 읽어 중복과 누락을 방지합니다. false이면 조회 중 추가된 결과가 들어올 수 있고 중복이나 누락도 발생할 수 있습니다. 기본값은 false입니다. | |
includeComputeUsage | boolean | 선택 | 계산 사용량을 응답에 포함할지 지정합니다. 현재 OSDK 애플리케이션에서만 사용할 수 있으며 성능을 낮출 수 있어 운영 환경에서는 권장하지 않습니다. | |
referenceSigningOptions | object | 선택 | 응답에 포함할 참조의 서명 옵션입니다. |
objectSet의 구조
전체 정의는 객체 집합 형식을 따릅니다.
orderBy의 구조
필드와 관련도 정렬의 구조는 조회 정렬 옵션을 따릅니다.
select의 구조
배열 항목은 SelectedPropertyApiName이며 자료형은 string입니다.
selectV2의 구조
배열 항목은 PropertyIdentifier이며 자료형은 PropertyIdentifier입니다.
객체 속성이나 구조체 필드의 식별자입니다.
속성 식별자를 사용합니다.
defaultLoadLevel의 구조
로드 수준을 사용합니다.
referenceSigningOptions의 구조
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
signMediaReferences | boolean | 선택 | 사용 중단 권고 필드이며 값은 무시합니다. 미디어 집합 뷰 기반 미디어 참조는 기본적으로 서명되고 각 MediaReference의 token으로 항목에 직접 접근할 수 있습니다. 호출자에게는 해당 속성을 가진 객체에 접근할 권한이 필요하며, 상위 미디어 집합의 조회 권한이 필요하지는 않습니다. true와 false 모두 동작을 바꾸지 않습니다. 미디어 참조 배열은 서명하지 않습니다. |
Person 인터페이스를 구현하는 객체를 페이지당 최대 10,000개까지 요청하는 본문입니다.
{
"objectSet": {
"type": "interfaceBase",
"interfaceType": "Person"
},
"pageSize": 10000
}
응답
응답 형식은 LoadObjectSetV2MultipleObjectTypesResponse입니다.
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
data | list<OntologyObjectV2> | 선택 | 현재 페이지의 객체 목록입니다. | |
nextPageToken | string | 선택 | 다음 페이지를 요청할 때 pageToken에 전달할 토큰입니다. 다음 토큰이 없으면 마지막 페이지입니다. | |
totalCount | long | 필수 | 모든 페이지에 걸친 전체 항목 수입니다. | 7587 |
interfaceToObjectTypeMappings | map<InterfaceTypeApiName, InterfaceToObjectTypeMappings> | 선택 | ||
interfaceToObjectTypeMappingsV2 | map<InterfaceTypeApiName, InterfaceToObjectTypeMappingsV2> | 선택 | ||
computeUsage | double | 선택 | compute-seconds 단위의 계산 사용량입니다. | 3.7 |
propertySecurities | list<PropertySecurities> | 선택 | ||
objectSetEntities | object | 선택 | 객체 집합 전체를 평가하면서 참조한 구체적인 객체 유형의 API 이름입니다. 인터페이스 구현 유형, 링크 탐색과 파생 속성에서 사용한 유형도 포함하며 현재 페이지에 해당 객체가 없을 수 있습니다. 정보를 제공할 수 있을 때 첫 페이지에서만 반환합니다. 이 정보는 바뀔 수 있으므로 집합을 다시 불러올 때 갱신해야 합니다. 필드가 생략되면 의존 유형 정보를 사용할 수 없다는 뜻입니다. |
data의 구조
배열 항목은 OntologyObjectV2이며 자료형은 map<PropertyApiName, PropertyValue>입니다.
맵의 키는 PropertyApiName(string), 값은 PropertyValue(any)입니다.
키: 속성의 API 이름입니다. Get Object Type 또는 Ontology Manager에서 확인합니다.
자료형별 JSON 표현은 객체 속성 값을 따릅니다.
interfaceToObjectTypeMappings의 구조
각 맵의 키와 값은 인터페이스 매핑을 따릅니다.
interfaceToObjectTypeMappingsV2의 구조
각 맵의 키와 값은 인터페이스 매핑을 따릅니다.
propertySecurities의 구조
전체 구조는 속성 보안 정보를 따릅니다.
objectSetEntities의 구조
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
objectTypeApiNames | list<ObjectTypeApiName> | 선택 |
objectTypeApiNames의 구조
배열 항목은 ObjectTypeApiName이며 자료형은 string입니다.
카멜 표기법의 객체 유형 API 이름입니다. 실제 이름과 대소문자는 List Object Types 또는 Ontology Manager에서 확인합니다.
객체 유형별 속성과 인터페이스 매핑을 포함한 응답 예시입니다.
{
"data": [
{
"$rid": "ri.phonograph2-objects.main.object.5b5dbc28-7f05-4e83-a33a-1e5b851",
"$primaryKey": 50030,
"$apiName": "Employee",
"employeeId": 50030,
"employeeName": "John"
},
{
"$rid": "ri.phonograph2-objects.main.object.88a6fccb-f333-46d6-a07e-7725c5f18b61",
"$primaryKey": 20090,
"$apiName": "Employee",
"employeeId": 20090,
"employeeName": "John"
},
{
"$rid": "ri.phonograph2-objects.main.object.88a6fccb-f333-46d6-a07e-7725c5f18b71",
"$primaryKey": 23,
"$apiName": "Athlete",
"jerseyNumber": 23,
"firstName": "Michael"
}
],
"totalCount": 3,
"interfaceToObjectTypeMappings": {
"Person": {
"Employee": {
"first": "employeeName",
"identifier": "employeeId"
},
"Athlete": {
"first": "firstName",
"identifier": "jerseyNumber"
}
}
}
}
개별 오류
오류 응답 처리는 공통 API 오류 계약을 따릅니다.
요청 예제
FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 예시 식별자와 매개변수 값은 실제 작업 대상에 맞게 바꿉니다.
온톨로지와 유형 이름, 속성 및 식별자, 브랜치와 시나리오 값은 실제 대상에 맞게 바꿉니다. 기본 브랜치를 사용할 때는 branch를 생략합니다.
cURL
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
"https://${FOUNDRY_HOST}/api/v2/ontologies/palantir/objectSets/loadObjectsMultipleObjectTypes?branch=ri.branch..branch.d827184f-ee0e-4351-8b70-efbe51e07252&scenarioRid=ri.actions..scenario.a1b2c3d4-e5f6-7890-abcd-ef1234567890&preview=true" \
-d '{"objectSet":{"type":"interfaceBase","interfaceType":"Person"},"pageSize":10000}'
Python
Requests 라이브러리가 설치된 Python 환경에서 사용합니다.
import os
import requests
HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
"content-type": "application/json",
"authorization": "Bearer {}".format(TOKEN)
}
request_body = {'objectSet': {'type': 'interfaceBase', 'interfaceType': 'Person'}, 'pageSize': 10000}
response = requests.post('https://{}/api/v2/ontologies/palantir/objectSets/loadObjectsMultipleObjectTypes?branch=ri.branch..branch.d827184f-ee0e-4351-8b70-efbe51e07252&scenarioRid=ri.actions..scenario.a1b2c3d4-e5f6-7890-abcd-ef1234567890&preview=true'.format(HOSTNAME), headers=headers, json=request_body)
print(response)
Java
Apache HttpClient 4.5 API와 try-with-resources를 사용합니다. 클래스 이름에 맞는 LoadObjectSetV2MultipleObjectTypesExample.java 파일에서 사용합니다.
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
public class LoadObjectSetV2MultipleObjectTypesExample {
public static void main(String[] args) throws Exception {
String HOSTNAME = System.getenv("FOUNDRY_HOST");
String TOKEN = System.getenv("FOUNDRY_TOKEN");
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPost request = new HttpPost("https://" + HOSTNAME + "/api/v2/ontologies/palantir/objectSets/loadObjectsMultipleObjectTypes?branch=ri.branch..branch.d827184f-ee0e-4351-8b70-efbe51e07252&scenarioRid=ri.actions..scenario.a1b2c3d4-e5f6-7890-abcd-ef1234567890&preview=true");
request.addHeader("content-type", "application/json");
request.addHeader("authorization", String.format("Bearer %s", TOKEN));
request.setEntity(new StringEntity("{\"objectSet\":{\"type\":\"interfaceBase\",\"interfaceType\":\"Person\"},\"pageSize\":10000}", ContentType.APPLICATION_JSON));
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println(response);
}
}
}
}
JavaScript
fetch를 제공하는 Node.js 환경에서 사용합니다. 서비스 사용자 토큰을 브라우저로 전달하지 않습니다.
const HOSTNAME = process.env.FOUNDRY_HOST;
const TOKEN = process.env.FOUNDRY_TOKEN;
fetch(`https://${HOSTNAME}/api/v2/ontologies/palantir/objectSets/loadObjectsMultipleObjectTypes?branch=ri.branch..branch.d827184f-ee0e-4351-8b70-efbe51e07252&scenarioRid=ri.actions..scenario.a1b2c3d4-e5f6-7890-abcd-ef1234567890&preview=true`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${TOKEN}`,
},
body: '{"objectSet":{"type":"interfaceBase","interfaceType":"Person"},"pageSize":10000}'
}).then((response) => {
console.log(response)
});
PowerShell
$ErrorActionPreference = 'Stop'
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST
$headers = @{
"authorization" = "Bearer $TOKEN"
}
$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v2/ontologies/palantir/objectSets/loadObjectsMultipleObjectTypes?branch=ri.branch..branch.d827184f-ee0e-4351-8b70-efbe51e07252&scenarioRid=ri.actions..scenario.a1b2c3d4-e5f6-7890-abcd-ef1234567890&preview=true" `
-Method Post `
-Headers $headers `
-ContentType application/json `
-Body "{`"objectSet`":{`"type`":`"interfaceBase`",`"interfaceType`":`"Person`"},`"pageSize`":10000}"
$response.content