Skip to content

Video API

awebow edited this page Aug 4, 2021 · 1 revision

동영상 정보 조회

Request

GET /videos/<동영상 ID>

Response

Status code

코드 설명
200 성공
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "id": "<동영상 ID>",
    "channel_id": "<채널 ID>",
    "title": "<동영상 제목>",
    "description": "<동영상 설명>",
    "duration": <동영상 길이(초): float>,
    "status": "<동영상 상태: 'ACTIVE' / 'ENCODING' / 'INACTIVE'>",
    "likes": <좋아요 수: integer>,
    "dislikes": <싫어요 수: integer>,
    "posted_at": "<게시 일시(RFC 3339)|nullable>",
    "updated_at": "<최근 수정 일시(RFC 3339)>",
    "deactivated_at": "<비활성화 일시(RFC 3339)|nullable>"
}

동영상 게시

Request

POST /videos

Header

Authorization: Bearer <인증 토큰>
Content-Type: application/json

Body

{
    "channel_id": "<채널 ID>",
    "title": "<동영상 제목>",
    "description": "<동영상 설명>"
}

Response

Status code

코드 설명
200 성공
401 사용자 인증 실패
403 해당 채널에 대한 권한이 없음
404 해당 채널이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "id": "<동영상 ID>",
    "token": "<업로드 토큰>"
}

동영상 목록 조회

Request

GET /videos?query=<검색 키워드|optional>&pagination=<페이지네이션 토큰|optional>&limit=<최대 결과 개수|optional>

Header

Authorization: Bearer <인증 토큰|optional>

구독 채널의 동영상을 우선하여 표시하려면 인증 토큰 입력

Response

Status code

코드 설명
200 성공
400 요청 데이터에 문제가 있음
401 사용자 인증 실패
500 서버 오류

Body(성공 시)

{
    "pagination": "<페이지네이션 토큰|nullable>",
    "data": [
        {
            "id": "<동영상 ID>",
            "channel_id": "<채널 ID>",
            "title": "<동영상 제목>",
            "description": "<동영상 설명>",
            "duration": <동영상 길이(초): float>,
            "status": "<동영상 상태: 'ACTIVE' / 'ENCODING' / 'INACTIVE'>",
            "likes": <좋아요 수: integer>,
            "dislikes": <싫어요 수: integer>,
            "posted_at": "<게시 일시(RFC 3339)|nullable>",
            "updated_at": "<최근 수정 일시(RFC 3339)>",
            "deactivated_at": "<비활성화 일시(RFC 3339)|nullable>"
        },
        ...
    ]
}

동영상 정보 수정

Request

PUT /videos/<동영상 ID>

Header

Authorization: Bearer <인증 토큰|optional>
Content-Type: application/json

Body

{
    "title": "<동영상 제목|optional>",
    "description": "<동영상 설명|optional>",
    "duration": "<동영상 길이|optional>",
    "status": "<동영상 상태: 'ACTIVE' / 'ENCODING' / 'INACTIVE'>",
    "posted_at": "<게시 일시(RFC 3339)|nullable>"
}

duration, status, posted_at은 사용자가 수정 불가능하고 인코딩 완료 시 영상의 정보를 입력하는데 사용.

Response

Status code

코드 설명
200 성공
400 요청 데이터에 문제가 있음
401 사용자 인증 실패
403 해당 요청에 대한 권한이 없음
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "id": "<동영상 ID>",
    "channel_id": "<채널 ID>",
    "title": "<동영상 제목>",
    "description": "<동영상 설명>",
    "duration": <동영상 길이(초): float>,
    "status": "<동영상 상태: 'ACTIVE' / 'ENCODING' / 'INACTIVE'>",
    "likes": <좋아요 수: integer>,
    "dislikes": <싫어요 수: integer>,
    "posted_at": "<게시 일시(RFC 3339)|nullable>",
    "updated_at": "<최근 수정 일시(RFC 3339)>",
    "deactivated_at": "<비활성화 일시(RFC 3339)|nullable>"
}

동영상 삭제

Request

DELETE /videos/<동영상 ID>

Header

Authorization: Bearer <인증 토큰>

Response

Status code

코드 설명
204 성공
401 사용자 인증 실패
403 해당 요청에 대한 권한이 없음
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

없음

동영상 썸네일 이미지 변경

Request

PUT /videos/<동영상 ID>/thumbnail

Header

Authorization: Bearer <인증 토큰>
Content-Type: multipart/form-data

Body

필드 유형 설명
file file 프로필 이미지 파일

Response

Status code

코드 설명
204 성공
401 사용자 인증 실패
403 해당 동영상에 대한 권한이 없음
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

없음

동영상 댓글 목록 조회

Request

GET /videos/<동영상 ID>/comments?pagination=<페이지네이션 토큰|optional>&limit=<최대 결과 개수|optional>

Header

Authorization: Bearer <인증 토큰|optional>

인코딩 중인 영상의 댓글 목록 조회 시 채널 소유자만 Authorization 헤더를 입력하여 조회 가능.

Response

Status code

코드 설명
200 성공
401 사용자 인증 실패
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "pagination": "<페이지네이션 토큰>",
    "data": [
        {
            "id": "<댓글 ID>",
            "video_id": "<동영상 ID>",
            "content": "<내용>",
            "writer_id": "<작성자 ID>",
            "posted_at": "<작성 일시(RFC 3339)>",
            "deactivated_at": "<비활성화 일시(RFC 3339)|nullable>"
        },
        ...
    ]
}

동영상 감정표현 조회

Request

GET /videos/<동영상 ID>/expressions

Header

Authorization: Bearer <인증 토큰|optional>

Response

Status code

코드 설명
200 성공
401 사용자 인증 실패
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "my_expression": "<내 감정표현: 'LIKE' / 'DISLIKE'|nullable>",
    "likes": <좋아요 수: integer>,
    "dislikes": <싫어요 수: integer>
}

동영상 감정표현 설정

Request

PUT /videos/<동영상 ID>/expressions

Header

Authorization: Bearer <인증 토큰>
Content-Type: application/json

Body

{
    "type": "<감정표현 유형: 'LIKE' / 'DISLIKE'>"
}

Response

Status code

코드 설명
200 성공
401 사용자 인증 실패
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "my_expression": "<내 감정표현: 'LIKE' / 'DISLIKE'>",
    "likes": <좋아요 수: integer>,
    "dislikes": <싫어요 수: integer>
}

동영상 감정표현 삭제

Request

DELETE /videos/<동영상>/expressions

Header

Authorization: Bearer <인증 토큰>

Response

Status code

코드 설명
200 성공
401 사용자 인증 실패
404 해당 동영상 또는 감정표현이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "my_expression": null,
    "likes": <좋아요 수: integer>,
    "dislikes": <싫어요 수: integer>
}

댓글 작성

Request

POST /comments

Header

Authorization: Bearer <인증 토큰>
Content-Type: application/json

Body

{
    "video_id": "<동영상 ID>",
    "content": "<내용>"
}

Response

Status code

코드 설명
200 성공
401 사용자 인증 실패
404 해당 동영상이 존재하지 않음
500 서버 오류

Body(성공 시)

{
    "id": "<댓글 ID>",
    "video_id": "<동영상 ID>",
    "content": "<내용>",
    "writer_id": "<작성자 ID>",
    "posted_at": "<작성 일시(RFC 3339)>",
    "deactivated_at": "<비활성화 일시(RFC 3339)|nullable>"
}

댓글 삭제

Request

DELETE /comments/<댓글 ID>

Header

Authorization: Bearer <인증 토큰>

Response

Status code

코드 설명
204 성공
401 사용자 인증 실패
403 해당 댓글에 대한 권한이 없음
404 해당 댓글이 존재하지 않음
500 서버 오류

Body(성공 시)

없음