it-swarm.dev

PUT 및 DELETE HTTP 요청 메소드의 유용성은 무엇입니까?

나는 이것에 대해 많은 것을 읽었지만이 주제에 대한 결론을 얻을 수는 없습니다.

그러나 PUT 또는 DELETE HTTP 요청 방법을 사용한 적이 없습니다. 내 시스템 경향 (제품 목록과 같은)이 시스템 상태에 영향을 미치지 않을 때 GET을 사용하고 영향을받는 경우 (주문) POST 충분하지 않습니까, 아니면 뭔가 빠졌습니까?

82
Rupesh Patel

DELETE는 요청 리소스를 삭제하기위한 것입니다.

DELETE 메소드는 Origin 서버가 Request-URI로 식별 된 자원을 삭제하도록 요청합니다. 이 방법은 Origin 서버에서 사람의 개입 (또는 다른 수단)으로 대체 될 수 있습니다. Origin 서버에서 반환 된 상태 코드가 작업이 성공적으로 완료되었음을 나타내는 경우에도 클라이언트는 작업이 수행되었음을 보증 할 수 없습니다.

PUT은 서버에 리소스를 넣거나 업데이트하기위한 것입니다.

PUT 메소드는 동봉 된 엔티티가 제공된 Request-URI 아래에 저장되도록 요청합니다. Request-URI가 이미 존재하는 자원을 참조하는 경우 동봉 된 엔티티는 Origin 서버에있는 수정 된 버전으로 간주해야합니다. Request-URI가 기존 자원을 가리 키지 않고 요청하는 사용자 에이전트가 해당 URI를 새 자원으로 정의 할 수있는 경우, Origin 서버는 해당 URI로 자원을 작성할 수 있습니다.

전체 사양 방문 :

안타깝게도 현재 브라우저는 POST 및 HTML 형식의 GET 이외의 다른 동사를 지원하지 않으므로 일반적으로 HTTP를 최대한 활용할 수 없습니다 (여전히 도용 할 수 있음) HTML 형식으로 이러한 메소드를 지원하지 않으면 동사와 같은 동사를 포함하는 URI가 생성됩니다.

POST http://example.com/order/1/delete

또는 더 나쁜

POST http://example.com/deleteOrder/id/1

hTTP를 통해 효과적으로 CRUD 의미를 터널링합니다. 그러나 동사는 결코 URI의 일부가되어서는 안됩니다. 대신 HTTP는 이미 HTTP 메소드를 통해 리소스 (예 : 순서)를 CRUD하기위한 메커니즘 및 의미론을 제공합니다. HTTP는 프로토콜이며 일부 데이터 터널링 서비스가 아닙니다.

웹 서버에서 리소스를 삭제하려면

DELETE http://example.com/order/1

그리고 당신이 전화를 업데이트

PUT http://example.com/order/1

웹 서버가 적용 할 수 있도록 업데이트 된 리소스 표현을 PUT 본문에 제공하십시오.

따라서 REST API 에 대해 일종의 클라이언트를 구축하는 경우 PUT 및 DELETE 요청을 보낼 수 있습니다. 이것은 브라우저 내부에 구축 된 클라이언트 일 수 있습니다 (예 : JavaScript를 통해 요청을 보내거나 서버에서 실행되는 일부 도구 일 수 있습니다.

자세한 내용은 다음을 방문하십시오.

82
Gordon

GET, POST, DELETE, PUT 등과 같은 HTTP 요청 동사를 사용하면 RESTful 웹 애플리케이션을 빌드 할 수 있습니다. 여기에서 읽으십시오 : http://en.wikipedia.org/wiki/Representational_state_transfer

이로부터 이점을 보는 가장 쉬운 방법은이 예제를 보는 것입니다. 모든 MVC 프레임 워크에는 URL을 actionController에 매핑하는 Router/Dispatcher가 있습니다. 따라서 다음과 같은 URL : /blog/article/1blogController::articleAction($id);을 호출합니다. 이제이 라우터는 URL 또는 /blog/article/1/ 만 인식합니다.

그러나 해당 라우터가 URL 대신 전체 HTTP 요청 객체를 알고 있다면 HTTP 요청 동사 (GET, POST, PUT, DELETE ...) 및 현재 HTTP 요청에 대한 기타 유용한 정보에 액세스 할 수 있습니다.

그러면 동일한 URL을 허용하고 HTTP 요청 동사에 따라 다른 actionController에 맵핑 할 수 있도록 애플리케이션을 구성 할 수 있습니다.

예를 들면 다음과 같습니다.

기사 1을 검색하려면 다음을 수행하십시오.

GET /blog/article/1 HTTP/1.1

그러나 기사 1을 삭제하려면 다음을 수행하십시오.

DELETE /blog/article/1 HTTP/1.1

두 HTTP 요청 모두 동일한 URI/blog/article/1을 가지지 만, 유일한 차이점은 HTTP 요청 동사입니다. 그리고 그 동사를 기반으로 라우터는 다른 actionController를 호출 할 수 있습니다. 깔끔한 URL을 만들 수 있습니다.

이 두 기사를 읽으면 도움이 될 것입니다.

심포니 2-HTTP 기초

심포니 2-라우팅

이 기사는 Symfony 2 프레임 워크에 관한 것이지만 HTTP 요청 및 응답의 작동 방식을 이해하는 데 도움이 될 수 있습니다.

이것이 도움이되기를 바랍니다!

23
Limeni

안전한 방법 : 자원 얻기/자원 수정 없음
Idempotent : 여러 번 요청하면 리소스 상태가 변경되지 않습니다
안전하지 않은 방법 : 리소스에서 리소스/수정 생성 또는 업데이트
Non-Idempotent : 여러 번 요청한 경우 자원 상태 변경

요구 사항에 따라 :

1) 안전하고 dem 등식 (Fetch Resource)을 사용하려면 --------- GET METHOD
2) 안전하지 않은 비등 전적인 작업 (자원 삽입)의 경우 --------- POST METHOD
3) 안전하지 않은 dem 등식 작업 (자원 업데이트)의 경우 --------- PUT METHOD
3) 안전하지 않은 dem 등식 (자원 삭제) 작업의 경우 --------- DELETE METHOD

1
user1953168