2017-04-13 3 views
0

사용자가 파일을 서버에 업로드 할 수있는 API Rest 서비스를 설계하고 있습니다.ID없이 입력 할 수 있습니까?

나는 이것이 PUT 요청이라고 생각하고 서버/리소스/ID로 이동하여 파일을 json 요청 본문에 base64로 갖습니다.

제 질문은이 ID와 관련이 있습니다. 내 머리에, 나는 파일을 서버에 전달하고 서버는 그 파일을 저장하고 나중에 그것을 검색 할 수있는 유일한 ID를 생성 한 다음이 ID를 ok 상태로 클라이언트에 반환해야한다.

ID를 사용하지 않고 서버/리소스로 보내고 싶습니다.하지만이 디자인은 좋지 않습니까?

+0

, 당신은 POST를 사용해야합니다, 서버가 ID와 객체를 반환하는 경우에, 그래서 당신이 맞아요, 당신은 필요 없어 ID를 사용하십시오, 그러나 방법은 또한 틀리다. –

답변

0

번호 PUT은 "생성 또는 업데이트"를 의미하며 명시적인 ID가 있어야합니다. POST는 새로운 것을 만드는 데 적합합니다.

은 참조 : PUT vs POST in REST

2

어떻게 든 @TatsuyukiIshi에 의해 주어진 허용 대답에 동의 문제의 실제 제목에 대해서. PUT의 의미는 다음과 같습니다. 주어진 URI에서 현재 얻을 수있는 내용을 요청에 포함 된 페이로드로 바꿉니다. 리소스가 ID없이 식별 될 수있는 경우, 즉 그 종류 중 하나만 존재할 수있는 경우, "단일 리소스"의 ID가 종점 자체에 이미 암시 적으로 주어 지므로 ID를 지정하지 않고 업데이트를 처리 할 수 ​​있습니다. 비록 이것이 드문 경우라고 인정해야합니다.

이러한 사례는 임의의 콘텐츠를 넣고 나중에 검색 할 수있는 리소스와 같은 클립 보드 일 수 있습니다. 물론 POST 요청으로받은 본문의 의미가 명확하지 않지만 POST을 사용할 수도 있습니다. 또한 POSTPUT 작업과 달리 멱등 물이 아닙니다.

그러나 PUT /api/messages과 같은 것을 사용하면 일반적으로 모든 메시지를 요청과 함께 전송 된 콘텐츠로 대체 할 수 있습니다. 실제로는 그렇지 않을 수도 있습니다. 일반적으로 한 번에 하나의 리소스 만 수정하여 특정 리소스를 식별하는 함께 제공된 ID를 사용하려고합니다.

질문의 실제 내용과 관련하여 POST을 통해 파일을 업로드하는 것이 일반적입니다. 성공적으로 업로드하면 생성 된 리소스를 가리키는 Location HTTP 헤더가 포함 된 201 Created 응답을 반환합니다. POST 요청을 통해 수신 된 콘텐츠를 처리하는 서비스의 동작은 서비스 구현 자까지 총합니다. 따라서 새 리소스를 만들거나 리소스를 실제로 만들지 않고도 일부 백업 작업을 수행 할 수 있습니다 (업데이트도 사양에 의해 금지되지 않음).

0

너무 오래되었지만이 질문과 함께 많은 잘못된 정보를 발견 했으므로 여기서 찾은 내용을 알려 드리겠습니다.

이 편안하고 규칙이 RFC 있는데,이 질문에 대한 하나는 당신이 발견 할 것이다, RFC 7231입니다 :

대상 자원의 상태가 만들거나 교체 할 수 put 메소드 요청 요청 메시지 페이로드에 동봉 된 표현 에 의해 정의 된 상태.

ID가없는 PUT을 보낼 수 없습니다.

많은 RESTful API가 업데이트시에도 POST를 보냅니다. 동일한 RFC에서도 잘못되었으므로 PUT을 사용하여 ID를 작성하거나 POST를 사용하여 업데이트를 작성하고 업데이트해야하지만 기억해야합니다. POST는 항상 만들어야합니다. 즉, GET으로 처음 찾지 않으면 파일을 복제합니다.

자세한 내용은

: 새 이미지를 만들려면 https://tools.ietf.org/html/rfc7231#section-4.3.3