REST
- REST = Representational State Transfer
- 구성 (= 자원 + 행위 + 표현)
- 자원(Resource): URI
- 행위(Verb): HTTP Method
- 표현(Representations)
HTTP Method
- HTTP Method는 크게 GET, POST, PUT, DELETE가 대표적
보통 CRUD에서 다음과 같이 이용
- 조회: GET
- 등록: POST
- 수정: PUT
- 삭제: DELETE
전체 종류
- GET: 서버로 부터 데이터를 취득
- POST: 서버에 데이터를 추가, 작성 등
- PUT: 서버의 데이터를 갱신, 작성 등
- DELETE: 서버의 데이터를 삭제
- HEAD: 서버 리소스의 헤더(메타 데이터의 취득)
- OPTIONS: 리소스가 지원하고 있는 메소드의 취득
- PATCH: 리소스의 일부분을 수정
- CONNECT: 프록시 동작의 터널 접속을 변경
멱등성(idempotent)
- 멱등성이란 여러번 수행해도 결과가 같음을 의미
- 즉, 호출로 인하여 데이터가 변형이 되지 않는다는 것을 의미
GET
- 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드
- 성공시 : XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴
- 실패시 : 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생
- 조회할 때만 사용 / 수정할 때는 사용 x
- GET 요청은 idempotent함
- 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다.
- 데이터를 변경하는 연산에 사용하면 안됨
- 데이터를 조회하는 것이기 때문에 요청시에 Body 값과 Content-Type 가 비워져있음
- 조회할 데이터에 대한 정보는 URL을 통해서 파라메터를 받고 있는 모습을 볼 수 있음
- GET은 캐싱이 가능하여 같은 데이터를 한번 더 조회할 경우에 저장한 값을 사용하여 조회 속도가 빨라짐
예시 > GET /user/1
POST
- POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용
- 성공시 : 201 (Created) HTTP 응답을 반환
- POST 요청은 idempotent 하지 않음
- 같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않음
- 데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야 함
- URL을 통해서 데이터를 받지 않고, Body 값을 통해서 받음
예시
POST /user
body : {date : "example"}
Content-Type : "application/json"
PUT
- PUT는 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용
- PUT 요청은 idempotent 합니다.
- 동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성됨
- 데이터를 수정하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야 함
- URL을 통해서 어떠한 데이터를 수정할지 파라미터를 받음. 그리고 수정할 데이터 값을 Body 값을 통해서 받음
- 성공시 : Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보냄
예시
PUT /user/1
body : {date : "update example"}
Content-Type : "application/json"
DELETE
- DELETE 메서드는 지정된 리소스를 삭제합니다.
- 데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져음
- URL을 통해서 어떠한 데이터를 삭제할지 파라미터를 받음
- 성공시 : Body 값 없이 성공 응답만 보내게 된다.
예시
DELETE /user/1
정리
보안 : GET 방식 vs POST 방식
- GET과 비교하여 URL에 데이터의 정보가 들어 있지 않으므로 조금 더 안전하다고 볼 수 있음
속도 : GET 방식 vs POST 방식
- GET 방식은 캐싱을 하기 때문에 여러번 요청시 저장된 데이터를 활용하므로 조금 더 빠를 수 있음
POST vs PUT
- POST는 새로운 데이터를 계속 생성하기 때문에 요청시마다 데이터를 생성
- PUT은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 같은 요청을 계속하더라도 데이터가 계속 생성되지는 않음
PUT vs PATCH
- PUT은 지정한 데이터를 전부 수정하는 Method이지만 PATCH는 정보의 일부분이 변경되는 방법
- PUT은 멱등하지만, PATCH는 멱등하다고 볼 수 없음
참고