JSON으로 수락하고 응답하는 REST API를 사용하여 서버를 개발 중입니다. 문제는 클라이언트에서 서버로 이미지를 업로드해야하는 경우입니다.
참고 : 또한 엔티티 (사용자)가 여러 파일 (carPhoto, licensePhoto)을 가질 수 있고 다른 속성 (이름, 이메일 ...)을 가질 수있는 유스 케이스에 대해 이야기하고 있지만 새 사용자를 만들 때 이러한 이미지를 보내지 않으면 등록 프로세스 후에 추가됩니다.
내가 알고있는 솔루션이지만 각각의 결함이 있습니다.
1. JSON 대신 multipart / form-data를 사용하십시오.
good : POST 및 PUT 요청은 가능한 한 RESTful이며 텍스트 입력을 파일과 함께 포함 할 수 있습니다.
단점 : 더 이상 JSON이 아니므로 multipart / form-data와 비교하여 테스트, 디버그 등이 훨씬 쉽습니다.
2. 별도의 파일 업데이트 허용
새 사용자를 만들기위한 POST 요청은 이미지를 추가 할 수 없으며 (이것은 유스 케이스에서 처음에 말한대로 괜찮습니다) PUT 요청에 의해 그림 업로드는 / parts / 4 / carPhoto와 같은 multipart / form-data로 수행됩니다
good : 파일 업로드 자체를 제외한 모든 것이 JSON에 남아 있으며 테스트 및 디버깅이 쉽습니다 (길이를 두려워하지 않고 완전한 JSON 요청을 기록 할 수 있음)
단점 : 직관적이지 않고 엔티티의 모든 변수를 한 번에 POST 또는 PUT 할 수 없으며이 주소 /users/4/carPhoto
는 컬렉션으로 간주 될 수 있습니다 (REST API의 표준 사용 사례는 다음과 같습니다 /users/4/shipments
). 일반적으로 엔티티의 각 변수를 GET / PUT 할 수 없습니다 (예 : users / 4 / name). GET으로 이름을 얻고 사용자 / 4에서 PUT으로 변경할 수 있습니다. ID 뒤에 무언가가 있으면 일반적으로 users / 4 / reviews와 같은 다른 컬렉션입니다.
3. Base64 사용
JSON으로 보내지 만 Base64로 파일을 인코딩하십시오.
good : 첫 번째 솔루션과 동일하며 가능한 한 RESTful 서비스입니다.
단점 : 다시 한번, 테스트 및 디버깅이 훨씬 나 빠지고 (본문은 메가 바이트의 데이터를 가질 수 있음) 클라이언트 및 서버 모두에서 크기가 증가하고 처리 시간이 증가합니다.
솔루션 번호를 정말로 사용하고 싶습니다. 2, 그러나 그것의 단점이 있습니다. 누구든지 "최고의 솔루션"에 대한 더 나은 통찰력을 줄 수 있습니까?
저의 목표는 가능한 한 많은 표준이 포함 된 RESTful 서비스를 제공하는 동시에 가능한 한 단순하게 유지하고 싶습니다.