Nice programing

파일 업로드를위한 REST 디자인

nicepro 2021. 1. 8. 22:54
반응형

파일 업로드를위한 REST 디자인


사용자가 다음을 수행 할 수있는 파일 업로드 서비스 용 REST API를 만들어야합니다.

  1. 세션 열기
  2. 여러 파일 업로드
  3. 세션 닫기

그런 다음 나중에 돌아와서 이전 세션에서 업로드 한 파일로 작업을 수행합니다.

각 파일에 대한 데이터를 처리하고 파일 자체의 내용을 쉽게 처리하기 위해 다음을 사용하려고 생각하는 URI 체계입니다.

/sessions/
/sessions/3
/sessions/3/files
/sessions/3/files/5
/sessions/3/file/5/content
/sessions/3/file/5/metadata

이렇게하면 파일 메타 데이터를 파일 내용과 별도로 처리 할 수 ​​있습니다. 이 경우 파일 콘텐츠 및 파일 메타 데이터 에 대해 GET 만 허용되며 둘 중 하나를 업데이트하려면 새 파일이 PUT이어야합니다.

이게 말이 돼? 그렇지 않다면 왜 그리고 어떻게 더 나을 수 있습니까?


세션이 필요한 이유는 무엇입니까? 인증 및 권한 부여 이유입니까? 그렇다면 SSL 또는 digest 와 함께 http basic을 사용합니다 . 따라서 http는 상태 비 저장이고 각 요청에 보안 헤더가 전송되기 때문에 시작 또는 종료 세션이 없습니다.

업로드 리소스의 제안은 개인 파일 시스템으로 직접 매핑하는 것입니다.


# returns all files and subdirs of root dir
GET /{userId}/files
GET /{userId}/files/file1
GET /{userId}/files/dir1
# create or update file
PUT /{userId}/files/file2



파일 콘텐츠를 업로드 할 때 멀티 파트 콘텐츠 유형을 사용 합니다 .

댓글 후 답변 수정

업로드 페이로드 내에 링크 (파일 콘텐츠)를 도입하여 원하는 파일 콘텐츠와 페이로드 분리를 설계합니다. 자원 구조를 용이하게합니다.

표현 '업로드'리소스 :


{
  "upload-content" : "http://storage.org/2a34cafa" ,
  "metadata" : "{ .... }" 
}

리소스 작업 :


# upload file resource
POST /files
-> HTTP 201 CREATED 
-> target location is shown by HTTP header 'Location: /files/2a34cafa

# /uploads as naming feels a bit more natural as /files
POST /sessions/{sessionId}/uploads
-> HTTP 201 CREATED
-> HTTP header: 'Location: /sessions/{sessionId}/uploads/1
-> also returning payload

# Updating upload (like metadata)
/PUT/sessions/{sessionId}/uploads/1 


참조 URL : https://stackoverflow.com/questions/8436224/rest-design-for-file-uploads

반응형