Frame.io 이전 API에서 V4로의 마이그레이션 가이드
Frame.io 이전 API에서 V4로의 마이그레이션 가이드
소개
Frame.io V4 API는 V2 엔드포인트 또는 Frame.io V3 API로 종종 불리던 이전 API를 재설계한 버전입니다. 이번 재설계는 이전 API의 모든 관련 기능을 유지하면서도 Frame V4의 새로운 성능과 기능을 최대한 활용하도록 이루어졌습니다. 이 가이드에서는 이전 API와 V4 API 간의 주요 차이점을 요약하고, 원활한 마이그레이션을 돕기 위한 단계별 지침을 제공합니다.
마이그레이션 체크리스트
인증
V4로 마이그레이션된 계정 중 아직 Adobe Admin Console을 통해 관리되지 않는 계정의 경우, Frame.io 개발자 사이트에서 관리되는 이전 개발자 토큰을 계속 사용할 수 있습니다. 단, API 요청 시 키는 x-frameio-legacy-token-auth, 값은 true인 헤더를 반드시 추가해야 합니다. 그렇지 않은 경우 아래의 인증 섹션 단계를 따르셔야 합니다.
기존 API 호출 업데이트
모든 이전 API 경로는 새로운 V4 API 경로 및 JSON 페이로드에 매핑되어야 합니다. 이 과정을 돕기 위해 아래에 상당히 포괄적인 매핑 테이블이 준비되어 있습니다.
아래 매핑 테이블에 나열되지 않은 엔드포인트 중 궁금한 점이 있으시다면 언제든 저희 지원팀(support@frame.io)으로 문의해 주시기 바랍니다.
Adobe Developer Console을 통한 인증 관리
Adobe Developer Console을 통해 관리되는 V4로 마이그레이션된 계정의 경우, OAuth 2.0과 함께 V4 API를 사용해야 합니다. 아래 단계를 따라 진행해 주세요.
인증 유형 선택
인증. 자세한 내용은 인증 가이드를 참조하세요. V4 계정이 아직 Adobe Admin Console을 통해 관리되지 않는 경우 이 단계를 건너뛸 수 있습니다. * 사용자 인증: 클라이언트 ID 및/또는 클라이언트 시크릿을 사용하여 Frame.io에 연결하며, 사용자가 사용자 이름과 비밀번호로 로그인해야 합니다. * 서버 간 인증: 클라이언트 ID와 클라이언트 시크릿을 사용하여 Frame.io에 연결하지만, 브라우저를 통해 로그인하는 중간 사용자 단계가 필요하지 않습니다.
엔드포인트 매핑(이전 API → V4)
이전 개발자 토큰 인증을 사용하는 경우, API 요청 시 키는 x-frameio-legacy-token-auth이고 값은 true인 헤더를 추가해야 합니다.
마이그레이션에 도움이 되는 일반 참고 사항:
1. 계정 및 사용자 정보
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| GET | /v2/accounts(사용자의 계정 가져오기) | GET | /v4/accounts(계정 나열) | V4는 사용자가 액세스할 수 있는 모든 계정을 반환합니다. |
| GET | /v2/accounts/{account_id}(ID로 계정 가져오기) | N/A | N/A | 특정 계정에 대한 정보는 계정 나열 엔드포인트에서 찾을 수 있습니다. |
| GET | /v2/me(현재 사용자 가져오기) | GET | /v4/me(사용자 세부 정보) | 현재 사용자의 프로필을 가져옵니다. |
| GET | /v2/accounts/{account_id}/membership | N/A | N/A | 역할과 권한은 작업 영역 및 프로젝트 권한을 통해 처리됩니다. |
2. 작업 영역(Team 엔드포인트 대체)
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| GET | /v2/accounts/{account_id}/teams(계정의 모든 팀 가져오기) | GET | /v4/accounts/{account_id}/workspaces(작업 영역 나열) | 이전 API의 “teams” 개념 → V4의 “workspaces”. |
| POST | /v2/accounts/{account_id}/teams(주어진 계정에 대한 팀 생성) | POST | /v4/accounts/{account_id}/workspaces(작업 영역 생성) | 본문은 유사합니다(이름 등). 응답은 team 오브젝트가 아니라 workspace 오브젝트입니다. |
| GET | /v2/teams/{team_id}(팀 가져오기) | GET | /v4/accounts/{account_id}/workspaces/{workspace_id}(작업 영역 표시) | V4에서는 Team ID → Workspace ID. |
| GET | /v2/teams/{team_id}/members(팀 멤버 가져오기) | GET | /v4/accounts/{account_id}/workspaces/{workspace_id}/users(작업 영역 멤버 가져오기) | 작업 영역의 모든 사용자를 반환합니다. |
| POST | /v2/teams/{team_id}/members(팀 멤버 추가)) | PATCH | /v4/accounts/{account_id}/workspaces/{workspace_id}/users/{user_id}(작업 영역에서 사용자 역할 추가 또는 업데이트) | 작업 영역에서 사용자를 추가하거나 제거할 수 있습니다. |
| GET | /v2/teams/{team_id}/membership(팀에 대한 사용자의 멤버십 가져오기) | N/A | N/A | 역할과 권한은 작업 영역 및 프로젝트 권한을 통해 처리됩니다. |
3. 프로젝트
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| GET | /v2/teams/{team_id}/projects(팀별 프로젝트 가져오기) | GET | /v4/accounts/{account_id}/workspaces/{workspace_id}/projects(프로젝트 나열) | V4에서는 account_id와 workspace_id를 모두 제공해야 합니다. |
| GET | /v2/projects/shared | GET | /v4/accounts/{account_id}/invited_projects(초대된 프로젝트 나열) | 초대된 프로젝트만 나열 /v4/accounts/{account_id}/projects는 초대된 프로젝트를 포함하여 모든 프로젝트를 나열합니다. |
| POST | /v2/teams/{team_id}/projects(프로젝트 생성) | POST | /v4/accounts/{account_id}/workspaces/{workspace_id}/projects(프로젝트 생성) | 본문은 유사합니다: { "name": "MyProject", … }. |
| GET | /v2/projects/{project_id}(ID로 프로젝트 가져오기) | GET | /v4/accounts/{account_id}/projects/{project_id}(프로젝트 표시) | account_id 및 project_id가 필요합니다. |
| PUT | /v2/projects/{project_id}(프로젝트 업데이트) | PATCH | /v4/accounts/{account_id}/workspaces/{workspace_id}/projects/{project_id}(프로젝트 업데이트) | V4는 부분 업데이트에 PATCH를 사용합니다. |
| DELETE | /v2/projects/{project_id}(ID로 프로젝트 삭제) | DELETE | /v4/accounts/{account_id}/workspaces/{workspace_id}/projects/{project_id}(프로젝트 삭제) | 프로젝트를 제거합니다. |
| GET | /v2/projects/{project_id}/collaborators(프로젝트 협업자 가져오기) | GET | /v4/accounts/{account_id}/projects/{project_id}/users(프로젝트 사용자 역할 나열) | 프로젝트의 모든 사용자를 반환합니다(이전 collaborators 엔드포인트와 가장 유사). |
| POST | /v2/projects/{project_id}/collaborators(프로젝트에 협업자 추가) | PATCH | /v4/accounts/{account_id}/projects/{project_id}/users/{user_id}(주어진 프로젝트에 대한 사용자 역할 업데이트) | 프로젝트에서 사용자를 추가하거나 제거할 수 있습니다(이전 collaborators 엔드포인트와 가장 유사). |
4. 폴더
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| GET | /v2/assets/{asset_id}/children(하위 에셋 가져오기) | GET | /v4/accounts/{account_id}/folders/{folder_id}/children(하위 폴더 나열) | 이전 API의 asset_id가 폴더였다면, V4에서는 folder_id가 됩니다. |
| POST | /v2/assets/{parent_asset_id}/children(에셋 생성) | POST | /v4/accounts/{account_id}/folders/{folder_id}/folders(폴더 생성) | 이전 API에서는 "type": "folder"를 사용했고, V4에서는 {"data": {"name": "Folder name"}}을 사용합니다. |
| GET | /v2/assets/{asset_id}(에셋 가져오기) | GET | /v4/accounts/{account_id}/folders/{folder_id}(폴더 표시) | 이전 API는 “type”: “folder”가 필요하며, V4 API는 경로 매개변수에 folder_id와 account_id가 필요합니다. |
| PUT | /v2/assets/{asset_id} (에셋 업데이트) | PATCH | /v4/accounts/{account_id}/folders/{folder_id}(폴더 업데이트) | 이전 API: asset_id가 폴더 ID가 됨 V4 API: 본문에 {"data": {"name": "New Folder Name"}}을 전달합니다. |
| DELETE | /v2/assets/{asset_id}(에셋 삭제) | DELETE | /v4/accounts/{account_id}/folders/{folder_id}(폴더 삭제) | 폴더를 제거합니다. |
| N/A | N/A | GET | /v4/accounts/{account_id}/folders/{folder_id}/folders(폴더 나열) | 주어진 폴더 내의 하위 폴더들을 나열합니다. (프로젝트 표시 경로에서 root_folder_id를 가져오고, 이를 사용하여 최상위 레벨에 있는 모든 폴더를 나열할 수 있습니다.) |
5. 버전 스택
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| POST | /v2/assets/{destination_folder}/copy(에셋 복사) | POST | /v4/accounts/{account_id}/version_stacks/{version_stack_id}/copy(버전 스택 복사) | 이전: 경로에 대상 폴더를 포함하여 요청 시 버전 스택과 함께 사용합니다. V4: 버전 스택을 복사합니다. |
| POST | /v2/assets/{asset_id}/version(에셋 버전 지정) | POST | /v4/accounts/{account_id}/folders/{folder_id}/version_stacks(버전 스택 생성) | 버전 스택을 생성합니다. 요청 본문에 2~10개의 파일 ID가 필요합니다. |
| POST | /v2/assets/{asset_id}/version(에셋 버전 지정) | PATCH | /v4/accounts/{account_id}/files/{file_id}/move(버전 스택으로 파일 이동) | 기존 버전 스택으로 파일을 이동합니다. 요청 본문에서 version_stack_id를 parent_id로 사용합니다. |
| GET | /v2/assets/{asset_id}/children(하위 에셋 가져오기) | GET | /v4/accounts/{account_id}/version_stacks/{version_stack_id}/children(버전 스택의 하위 항목 나열) | 이전: 버전 스택의 asset_id와 함께 사용합니다. V4: 버전 스택 내의 하위 항목(파일/버전)을 나열합니다. |
| N/A | N/A | GET | /v4/accounts/{account_id}/folders/{folder_id}/version_stacks(버전 스택 나열) | 폴더 내의 버전 스택을 나열합니다. |
| N/A | N/A | PATCH | /v4/accounts/{account_id}/version_stacks/{version_stack_id}/move(버전 스택 이동) | 버전 스택을 다른 폴더로 이동합니다. |
| GET | /v2/assets/{asset_id}(에셋 가져오기) | GET | /v4/accounts/{account_id}/version_stacks/{version_stack_id}(버전 스택 표시) | 이전: 버전 스택의 asset_id와 함께 사용합니다. V4: 버전 스택의 세부 정보를 표시합니다. |
| DELETE | /v2/assets/{asset_id}/unversion(버전 해제 삭제) | N/A | N/A | 에셋의 버전을 해제하는 기능은 현재 V4에서 지원되지 않습니다. |
6. 파일
참고: V4에서는 파일을 생성하기 위한 엔드포인트가 두 가지(로컬 업로드용 및 S3 원격 업로드용)로 나뉘어졌습니다. 자세한 내용은 파일 업로드를 참조하세요.
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| POST | /v2/assets/{parent_asset_id}/children(에셋 생성) | POST | /v4/accounts/{account_id}/folders/{folder_id}/files/local_upload(파일 생성(로컬 업로드)) | 이전 API: name, type, filetype, filesize, auto_version_id가 필요함 V4 API: 경로 매개변수에 account_id와 folder_id가 필요하며, 페이로드 본문에 file_size와 name이 필요함 |
| N/A | N/A | POST | /v4/accounts/{account_id}/folders/{folder_id}/files/remote_upload(파일 생성(원격 업로드)) | 경로 매개변수에 account_id와 folder_id가 필요하며, 페이로드 본문에 source url과 name이 필요함 |
| GET | /v2/assets/{asset_id}(에셋 가져오기) | GET | /v4/accounts/{account_id}/files/{file_id}(파일 표시) | 파일 세부 정보를 표시합니다. 응답에 추가적인 파일 세부 정보를 반환하도록 요청할 수 있는 여러 include 매개변수가 제공됩니다. |
| N/A | N/A | GET | /v4/accounts/{account_id}/files/{file_id}/status(파일 메타데이터 가져오기) | 파일 생성(원격 업로드) 엔드포인트에서 시작된 원격 업로드의 상태를 가져옵니다. |
| PUT | /v2/assets/{asset_id}(에셋 업데이트) | PATCH | /v4/accounts/{account_id}/files/{file_id}(파일 업데이트) | 파일 이름을 업데이트합니다. |
| DELETE | /v2/assets/{asset_id}(에셋 삭제) | DELETE | /v4/accounts/{account_id}/files/{file_id}(파일 삭제) | 성공 시 204 No Content를 반환합니다. |
7. 코멘트
현재 V4 API의 코멘트 기능 대부분이 지원됩니다.
출시 예정 기능:
- 코멘트 반응(예: 이모지)
- 코멘트 완료 상태 보기 또는 수정
- 코멘트를 본 사람 확인(노출수)
“timestamp” 필드는 타임스탬프(시간)가 아니라 코멘트가 남겨진 프레임 번호(1부터 시작)를 나타냅니다.
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| GET | /v2/assets/{asset_id}/comments(코멘트 스레드의 모든 코멘트 및 답글 가져오기) | GET | /v4/accounts/{account_id}/files/{file_id}/comments(코멘트 나열) | 파일에 달린 코멘트를 나열합니다. |
| POST | /v2/assets/{asset_id}/comments(코멘트 생성) | POST | /v4/accounts/{account_id}/files/{asset_id}/comments(코멘트 생성) | 코멘트를 생성합니다. 본문은 {"text":"Nice","timestamp":12.3}과 유사합니다. |
| GET | /v2/comments/{comment_id}(ID로 코멘트 가져오기) | GET | /v4/accounts/{account_id}/comments/{comment_id}(코멘트 표시) | ID를 통해 단일 코멘트를 가져옵니다. |
| PUT | /v2/comments/{comment_id}(코멘트 업데이트) | PATCH | /v4/accounts/{account_id}/comments/{comment_id}(코멘트 업데이트) | 텍스트, 시간 등을 업데이트합니다. |
| DELETE | /v2/comments/{comment_id}(코멘트 삭제) | DELETE | /v4/accounts/{account_id}/comments/{comment_id}(코멘트 삭제) | 코멘트를 제거합니다. |
| GET | /v2/comments/{comment_id}/impressions(노출수 가져오기) | N/A | N/A | 노출수 기능은 현재 V4에서 지원되지 않습니다. |
8. 공유(검토 링크 / 프레젠테이션)
Frame V4에서는 공유 링크가 더 이상 검토 링크와 프레젠테이션 링크로 나뉘지 않습니다. V4에서는 리뷰 또는 프레젠테이션의 목적에 맞게 공유 링크의 스타일을 다르게 구성할 수 있게 되었습니다.
참고: V4 API를 통해 이전 검토 링크 및 프레젠테이션과 상호 작용하는 것은 지원되지 않습니다.
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| GET | /v2/projects/{project_id}/review_links(프로젝트 내 검토 링크 나열) | GET | /v4/accounts/{account_id}/projects/{project_id}/shares(공유 목록 나열) | 프로젝트 내의 공유 링크를 나열합니다(참고: 이전 검토 링크 및 프레젠테이션은 여기에 포함되지 않음). |
| POST | /v2/projects/{project_id}/review_links(검토 링크 생성)) | POST | /v4/accounts/{account_id}/projects/{project_id}/shares(공유 링크 생성) | 새로운 공유 링크를 생성합니다. 본문은 {"data":{"name":"Review Link","type":"review"}} 형식이 될 수 있습니다. |
| POST | /v2/review_links/{link_id}/assets(검토 링크에 에셋 추가) | POST | /v4/accounts/{account_id}/shares/{share_id}/assets(공유 링크에 새 에셋 추가) | 공유 링크에 에셋을 추가합니다. 파일, 폴더, 버전 스택을 모두 지원합니다. |
| N/A | 존재하지 않음 | DELETE | /v4/accounts/{account_id}/shares/{share_id}/assets/{asset_id}(공유 링크 삭제) | 공유 링크에서 에셋을 제거합니다. |
| DELETE | /v2/review_links/{link_id}(검토 링크 삭제) | DELETE | /v4/accounts/{account_id}/shares/{share_id}(공유 링크 삭제) | 공유 링크를 삭제합니다. |
| PUT | /v2/review_links/{review_link_id}(검토 링크 업데이트) | PATCH | /v4/accounts/{account_id}/shares/{share_id}(공유 링크 업데이트) | 공유 링크를 업데이트합니다. |
9. Webhook
V3에서 사용하던 웹훅은 마이그레이션되며 대부분 동일하게 작동합니다. 마이그레이션 시 기본적으로 비활성화되므로 정상 작동하려면 활성화해야 합니다. 이제 파일과 폴더로 나뉜 에셋 이벤트와 관련하여 몇 가지 변경 사항이 필요합니다. metadata.value.updated, 컬렉션 관련 이벤트, 공유 링크 관련 이벤트 등 V4에 새롭게 추가된 이벤트를 염두에 두어야 합니다.
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| POST | /v2/teams/{team_id}/hooks(웹훅 생성) | POST | /v4/accounts/{account_id}/workspaces/{workspaces_id}/webhooks(웹훅 생성) | {"data":{"url":"...","events":["file.created",...]}} 형태의 페이로드를 제공합니다. |
| GET | /v2/accounts/{account_id}/webhooks(계정에 대한 웹훅 가져오기) | GET | /v4/accounts/{account_id}/workspaces/{workspaces_id}/webhooks(웹훅 나열) | 작업 영역에 대한 모든 웹훅을 가져옵니다. 참고: 계정에 대한 모든 웹훅을 가져오려면 계정의 모든 작업 영역을 먼저 가져온 다음 해당 작업 영역에 대한 모든 웹훅을 가져와야 합니다. |
| GET | /v2/hooks/{hook_id}(웹훅 가져오기) | GET | /v4/accounts/{account_id}/webhooks/{webhook_id}(웹훅 나열) | 웹훅 정보를 가져옵니다. |
| PUT | /v2/hooks/{hook_id}(웹훅 업데이트) | PATCH | /v4/accounts/{account_id}/webhooks/{webhook_id}(웹훅 업데이트) | 웹훅 설정을 업데이트합니다. |
| DELETE | /v2/hooks/{hook_id}(웹훅 삭제) | DELETE | /v4/accounts/{account_id}/webhooks/{webhook_id}(웹훅 삭제) | 웹훅을 제거합니다. |
10. 사용자 지정 작업
V3에서 사용하던 사용자 지정 작업은 마이그레이션되지만, 요청 및 응답 처리에 약간의 수정이 필요합니다. 마이그레이션 시 기본적으로 비활성화되므로 정상 작동하려면 활성화해야 합니다. 자세한 내용은 이 문서를 참조하세요.
참고: 사용자 지정 작업 엔드포인트는 현재 실험적 API로 제공되며 “api-version: experimental” 헤더가 필요합니다.
| 방법 | 이전 엔드포인트 | 방법 | V4 엔드포인트 | 메모 |
|---|---|---|---|---|
| POST | /v2/teams/{team_id}/actions (사용자 지정 작업 생성) | POST | /v4/accounts/{account_id}/workspaces/{workspace_id}/actions (사용자 지정 작업 생성) | 작업 영역에 사용자 지정 작업을 생성합니다. |
| DELETE | /v2/actions/{action_id} (사용자 지정 작업 삭제) | DELETE | /v4/accounts/{account_id}/actions/{action_id} (사용자 지정 작업 삭제) | 사용자 지정 작업을 삭제합니다. |
| PUT | /v2/actions/{action_id} (사용자 지정 작업 업데이트) | PATCH | /v4/accounts/{account_id}/actions/{action_id} (사용자 지정 작업 업데이트) | 사용자 지정 작업의 세부 정보를 업데이트합니다. |
| GET | /v2/teams/{team_id}/actions (팀에 대한 사용자 지정 작업 가져오기) | GET | /v4/accounts/{account_id}/workspaces/{workspace_id}/actions (사용자 지정 작업 나열) | 특정 작업 영역의 사용자 지정 작업을 나열합니다. |
| GET | /v2/actions/{action_id} (ID로 사용자 지정 작업 가져오기) | GET | /v4/accounts/{account_id}/actions/{action_id} (사용자 지정 작업 세부 정보 표시) | 사용자 지정 작업의 세부 정보를 표시합니다. |
마이그레이션 단계
오류 처리 및 일반적인 문제
일부 경로는 아래 예시와 약간 다를 수 있는 사용자 지정 설명이 포함된 오류를 반환합니다.
- 400 Bad Request: 페이로드의 정확성을 확인하세요. * 401 Unauthorized: 인증 토큰이 유효하지 않거나 누락되었습니다. * 403 Forbidden: 권한이 누락되었거나 사용자에게 액세스 권한이 없습니다. * 404 Not Found: 엔드포인트, API 버전 또는 ID를 확인하세요. * 422 Unprocessable Entity: 요청 데이터를 검증하세요. * 429 Too Many Requests: 백오프 전략을 적용하여 재시도를 구현하세요.
- 500 Internal Server Error: 잠시 후 다시 시도하세요.
SDK 지원
이전 SDK와 마찬가지로 개발자가 사용할 수 있는 Python SDK가 있으며, 이번에 처음으로 Typescript SDK도 함께 제공됩니다. 이러한 SDK는 비슷한 기능을 제공하지만 메서드가 완전히 다릅니다. 이전 SDK에서 V4 SDK로 업데이트하는 경우 코드도 그에 맞춰 반드시 업데이트하시기 바랍니다. 아래 링크에서 SDK를 찾을 수 있습니다.
시작하기 SDKSPython SDKTypescript SDK