REST : PUT 방식으로 바이너리 데이터 업로드

Sep 02 2020

PUT를 사용하여 기존 데이터를 대체하는 편안한 앱이 있습니다. 예를 들어, 사용자 관리 URL https : // myserver / users가 있고 사용자 데이터를 바꾸려면 (예 : 사용자의 이름과 급여를 id = 123으로 변경하려면 https : // myserver / users /를 사용합니다.) 다음과 같이 요청 본문에 application / json 인코딩 된 새 사용자 데이터가있는 123입니다.

{
    name: "John",
    salary: 123.45
}

이제 사용자 사진도 관리해야합니다. I. e. 클라이언트 (ecmascript spa)에서 사용자의 사진을 업로드하고 서버에 변경 (저장, 기존의 경우 대체) 할 수 있습니다. 문제는 PUT 방법으로 바이너리 그림을 업로드하는 방법입니다. 중요한 경우 순수한 서블릿 또는 jax-rs 중 하나 인 서버 측에서 Java를 사용합니다. 그러나 나는 그것을하기위한 "올바른"그리고 "올바른"RESTful 방법을 이해하고 싶다. 다음과 같은 가능성이 있습니다.

  1. json 본문에 base64로 인코딩 된 데이터를 문자열로 포함합니다. 그러나 그림은 상당히 클 수 있으므로 갈 길이 아닙니다.
  2. 멀티 파트 / 양식 데이터를 사용합니다. 그러나 내 서블릿 컨테이너 나 jax-rs는 이러한 요청을 자동으로 구문 분석 할 수 없으므로 POST 메서드에 대해서만 다중 부분 양식 데이터 자동 구문 분석을 허용합니다.
  3. 전용 URL을 사용하여 POST로 사진을 업로드하려면 PUT에 저장된 사진의 ID를 사용합니다. 그러나 그것은 나에게 올바른 RESTful 방법처럼 보이지 않으며 그것을 구현하려면 2 개의 요청이 필요합니다.

그래서 제 질문은 더 일반적입니다. 그러한 사건을 처리하는 가장 편리한 방법은 무엇입니까?

답변

3 Blake Sep 02 2020 at 02:02

나는 그것을 별도의 리소스로 취급하고 POST / users / 123 / profile-picture와 같은 게시물을 사용합니다. 이렇게하면 웹 페이지에 프로필을 더 쉽게 추가 할 수 있습니다. 예 :

<img src="/users/123/profile-picture">