# REST API UI 구현 패턴 UPDATE, DELETE, UPSERT 노드에 적용할 REST API UI 패턴입니다. ## 1. Import 추가 ```typescript import { Database, Globe, Link2 } from "lucide-react"; import { getTestedExternalConnections, getExternalTables, getExternalColumns } from "@/lib/api/nodeExternalConnections"; import type { ExternalConnection, ExternalTable, ExternalColumn } from "@/lib/api/nodeExternalConnections"; ``` ## 2. 상태 변수 추가 ```typescript // 타겟 타입 상태 const [targetType, setTargetType] = useState<"internal" | "external" | "api">(data.targetType || "internal"); // 외부 DB 관련 상태 const [externalConnections, setExternalConnections] = useState([]); const [externalConnectionsLoading, setExternalConnectionsLoading] = useState(false); const [selectedExternalConnectionId, setSelectedExternalConnectionId] = useState(data.externalConnectionId); const [externalTables, setExternalTables] = useState([]); const [externalTablesLoading, setExternalTablesLoading] = useState(false); const [externalTargetTable, setExternalTargetTable] = useState(data.externalTargetTable); const [externalColumns, setExternalColumns] = useState([]); const [externalColumnsLoading, setExternalColumnsLoading] = useState(false); // REST API 관련 상태 const [apiEndpoint, setApiEndpoint] = useState(data.apiEndpoint || ""); const [apiMethod, setApiMethod] = useState<"PUT" | "PATCH" | "DELETE">(data.apiMethod || "PUT"); const [apiAuthType, setApiAuthType] = useState<"none" | "basic" | "bearer" | "apikey">(data.apiAuthType || "none"); const [apiAuthConfig, setApiAuthConfig] = useState(data.apiAuthConfig || {}); const [apiHeaders, setApiHeaders] = useState>(data.apiHeaders || {}); const [apiBodyTemplate, setApiBodyTemplate] = useState(data.apiBodyTemplate || ""); ``` ## 3. 타겟 타입 선택 UI (기본 정보 섹션 내부) 기존 "타겟 테이블" 입력 필드 위에 추가: ```tsx {/* 🔥 타겟 타입 선택 */}
{/* 내부 데이터베이스 */} {/* 외부 데이터베이스 */} {/* REST API */}
``` ## 4. REST API 설정 UI (타겟 타입이 "api"일 때) 기존 테이블 선택 UI를 조건부로 변경하고, REST API UI 추가: ```tsx {/* 내부 DB 설정 */} {targetType === "internal" && (
{/* 기존 타겟 테이블 Combobox */}
)} {/* 외부 DB 설정 (INSERT 노드 참고) */} {targetType === "external" && (
{/* 외부 커넥션 선택, 테이블 선택, 컬럼 표시 */}
)} {/* REST API 설정 */} {targetType === "api" && (
{/* API 엔드포인트 */}
{ setApiEndpoint(e.target.value); updateNode(nodeId, { apiEndpoint: e.target.value }); }} className="h-8 text-xs" />
{/* HTTP 메서드 (UPDATE: PUT/PATCH, DELETE: DELETE만) */}
{/* 인증 방식, 인증 정보, 커스텀 헤더 (INSERT와 동일) */} {/* 요청 바디 템플릿 (DELETE는 제외) */}