REST는 HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처고, REST API는 REST를 기반으로 서비스 API를 구현한 것을 의미한다.
| 구성 요소 | 내용 | 표현 방법 |
| 자원 | 자원 | URI(엔드포인트) |
| 행위 | 자원에 대한 행위 | HTTP 요청 메서드 |
| 표현 | 자원에 대한 행위의 구체적 내용 | 페이로드 |
REST에서 가장 중요한 기본적인 원칙은 두 가지다.
URI : 리소스를 표현하는데 집중 => 리소스를 식별할 수 있는 이름은 동사보다는 명사를 사용한다. 따라서, 이름에 get 같은 행위에 대한 표현이 들어가서는 안 된다.
HTTP 요청 메서드 : 행위에 대한 정의 => 클라이언트가 서버에게 요청의 종류와 목적을 알리는 방법니다. 주로 (GET,POST,PUT,PATCH,DELETE등)를 사용하여 CRUD를 구현한다.
❗️리소스에 대한 행위는 HTTP 요청 메서드를 통해 표현하며 URI에 표현하지 않는다. 예를 들어, 리소스를 취득하는 경우에는 GET, 리소스를 삭제하는 경우에는 DELETE를 사용하여 리소스에 대한 행위를 명확히 표현한다.
👍
GET /todos/1
DELETE /todos/1
👎
GET /todos/delete/1
GET /todos/show/1
GET /getTodos/1
| Method | Meaning |
| GET | Read data |
| POST | Insert data |
| PUT or PATCH | Update data, or insert if a new id |
| DELETE | Delete data |
🥸지금부터 get과 post의 차이의 대하여 알아보겠습니다 ~🥸
실제 많은 개발자들이 GET 과 POST를 용도구분 없이 혼용해서 사용하고 이를 혼용해서 문제가 된것은 Google의 Accelerator 사건을 찾아보면 쉽게 알 수 있습니다.
GET 과 POST의 개념을 확실히 이해하고 이를 스펙에 정의된 용도대로 사용한다면 부가적으로 얻을 수 있는 이익이 많고, 전체 웹에서도 올바르게 사용될 수 있습니다. 그러면 GET과 POST를 정확히 알아봅시다.
| GET | POST |
| select적인 성향을 가지고 있다 즉, 서버에서 어떠한 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태등을 바꾸지는 않는다. 조금더 쉽게 말하자면 데이터를 읽거나 ,검색 할때 사용되는 method이다. (게시판의 리스트 OR 글 보기 같은 것이 이에 해당한다) |
서버의 값이나 상태를 바꾸기 위해서 사용한다. (글쓰기를 수행시 글의 내용이 DB에 저장되고 수정을 하면 DB값이 수정된다. 이럴 경우에 POST를 사용한다.) |
| GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이부분을 쿼리 스트링이라 부릅니다. (ex. www.example.com/resources?name1=react&name2=study) |
전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송합니다. HTTP메세지의 Body는 길이의 제한없이 데이터를 전송할 수 있습니다. 그래서 POST요청은 GET과 달리 대용량 데이터를 전송할 수 있습니다. |

위의 사진은 get 과 post의 리소스 전달 차이점을 나타낸 사진입니다.
정리를 해보자면
| GET | POST | |
| 캐시 | O | X |
| 브라우저 기록 | O | X |
| 북마크 추가 | O | X |
| 데이터 길이 제한 | O | X |
| HTTP 응답 코드 | 200(Ok) | 201(Created) |
| 언제 사용하는 가? | 리소스 요청 | 리소스 생성 |
| 리소스 전달 방식 | 쿼리스트링 | HTTP Body |