사용자 지정 JDBC 드라이버 업로드(Upload Custom JDBC Drivers Connection) (V2)
기존 JDBC 연결에 사용자 지정 드라이버 파일을 업로드합니다. fileName은 .jar로 끝나야 하며 본문에는 해당 파일의 바이너리 내용을 그대로 보냅니다. Content-Type은 application/octet-stream입니다.
대상 연결과 드라이버를 확인한 뒤 호출합니다. 생성 입력의 uploadedJdbcDrivers 필드를 채우는 방식이 아니라 이 엔드포인트로 파일을 전송하며, 업로드한 이름은 JDBC 연결 구성의 조회 필드에 있습니다.
HTTP 요청
POST /api/v2/connectivity/connections/{connectionRid}/uploadCustomJdbcDrivers
작업 식별자는 v2.uploadCustomJdbcDriversConnection입니다. OAuth2로 호출하는 타사 애플리케이션에는 api:connectivity-connection-write 권한 범위가 필요합니다. 각 요청에 Authorization: Bearer <접근 토큰>을 전달합니다.
경로 매개변수
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
connectionRid | string | 필수 | 소스라고도 부르는 Connection의 RID입니다. | ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b |
쿼리 매개변수
| 이름 | 자료형 | 필수 여부 | 의미와 조건 | 예시 값 |
|---|---|---|---|---|
fileName | string | 필수 | 업로드할 JDBC 드라이버의 파일 이름이며 .jar로 끝나야 합니다. | cdata.jdbc.oracle.jar |
요청 본문
본문은 필수 바이너리 파일 내용입니다. JSON 문자열이나 multipart 폼으로 감싸지 않습니다.
응답
업로드 요청의 응답으로 Connection을 반환합니다.
Connection의 필수 메타데이터, 워커와 내보내기 설정은 Connection 자료형을 따릅니다. 외부 시스템별 필드는 연결 구성에서 확인합니다.
가상 JDBC 연결의 응답 예시입니다.
{
"parentFolderRid": "ri.compass.main.folder.c410f510-2937-420e-8ea3-8c9bcb3c1791",
"configuration": {
"type": "jdbc",
"url": "jdbc:postgresql://db.example.com:5432/example",
"driverClass": "org.postgresql.Driver"
},
"displayName": "Connection to my external system",
"exportSettings": {
"exportsEnabled": true,
"exportEnabledWithoutMarkingsValidation": false
},
"rid": "ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b",
"worker": {
"type": "foundryWorker"
}
}
개별 오류
| 오류 이름 | 오류 코드 | HTTP | 의미와 조건 | 추가 매개변수 |
|---|---|---|---|---|
UploadCustomJdbcDriversConnectionPermissionDenied | PERMISSION_DENIED | 403 | 연결에 사용자 지정 JDBC 드라이버를 업로드할 수 없습니다. | connectionRid |
ConnectionNotFound | NOT_FOUND | 404 | 지정한 연결을 찾을 수 없습니다. | connectionRid |
요청 예제
FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 예시 RID와 매개변수는 실제 작업 대상으로 바꿉니다.
JDBC_DRIVER_FILE에는 업로드할 실제 JAR 파일의 경로를 지정합니다. fileName=cdata.jdbc.oracle.jar는 이름의 예시이며 실제 업로드 이름에 맞게 바꿉니다. 이름은 .jar로 끝나야 하고 URL 쿼리 값으로 인코딩해야 합니다. JAR은 대상 연결의 데이터베이스와 드라이버 클래스에 맞는 파일을 준비합니다. 본문을 JSON이나 multipart로 변환하지 않습니다.
cURL
curl -X POST \
-H "Content-type: application/octet-stream" \
-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
"https://${FOUNDRY_HOST}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/uploadCustomJdbcDrivers?fileName=cdata.jdbc.oracle.jar" \
--data-binary "@${JDBC_DRIVER_FILE}"
Python
Requests 라이브러리가 설치된 환경에서 사용합니다.
import os
import requests
HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
"content-type": "application/octet-stream",
"authorization": "Bearer {}".format(TOKEN)
}
with open(os.environ["JDBC_DRIVER_FILE"], "rb") as file_body:
response = requests.post('https://{}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/uploadCustomJdbcDrivers?fileName=cdata.jdbc.oracle.jar'.format(HOSTNAME), headers=headers, data=file_body)
print(response)
Java
Apache HttpClient 4.5 API를 사용하는 UploadCustomJdbcDriversConnectionExample.java 예제입니다.
import java.io.File;
import org.apache.http.entity.FileEntity;
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;
public class UploadCustomJdbcDriversConnectionExample {
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/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/uploadCustomJdbcDrivers?fileName=cdata.jdbc.oracle.jar");
request.addHeader("content-type", "application/octet-stream");
request.addHeader("authorization", String.format("Bearer %s", TOKEN));
request.setEntity(new FileEntity(new File(System.getenv("JDBC_DRIVER_FILE"))));
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println(response);
}
}
}
}
JavaScript
fetch를 제공하는 Node.js의 ES 모듈(.mjs)에서 사용합니다. 파일을 바이트로 읽어 전송하며 서비스 사용자 토큰을 브라우저로 전달하지 않습니다.
import { readFileSync } from "node:fs";
const HOSTNAME = process.env.FOUNDRY_HOST;
const TOKEN = process.env.FOUNDRY_TOKEN;
fetch(`https://${HOSTNAME}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/uploadCustomJdbcDrivers?fileName=cdata.jdbc.oracle.jar`, {
method: 'POST',
headers: {
'Content-Type': 'application/octet-stream',
'Authorization': `Bearer ${TOKEN}`,
},
body: readFileSync(process.env.JDBC_DRIVER_FILE)
}).then((response) => {
console.log(response)
});
PowerShell
오류가 발생하면 예제를 중단하도록 $ErrorActionPreference를 설정합니다.
$ErrorActionPreference = 'Stop'
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST
$headers = @{
"authorization" = "Bearer $TOKEN"
}
$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/uploadCustomJdbcDrivers?fileName=cdata.jdbc.oracle.jar" `
-Method Post `
-Headers $headers `
-ContentType application/octet-stream `
-InFile $env:JDBC_DRIVER_FILE
$response.content