# Rest API

## REST API란?

**REST**(Representational State Transfer)는 웹이 HTTP 설계상 우수성을 제대로 사용하지 못하고 있는 상황을 보고 웹의 장점을 최대한 활용할 수 있는 아키텍쳐로서 REST를 소개하였고, 이는 HTTP 프로토콜을 의도에 맞게 디자인하도록 유도하고 있다. REST의 기본 원칙을 성실히 지킨 서비스 디자인을 **RESTful**이라 표현한다.

### REST API의 구성

REST API는 **자원**(Resource), **행위**(Verb), **표현**(Representations)의 3가지 요소로 구성된다.

| 구성 요소           | 내용            | 표현 방법                 |
| --------------- | ------------- | --------------------- |
| Resource        | 자원            | HTTP URI              |
| Verb            | 자원에 대한 행위     | HTTP Method           |
| Representations | 자원에 대한 행위의 내용 | HTTP Message Pay Load |

### HTTP Method

4가지의 Method(GET, POST, PUT, DELETE)를 사용하여 **CRUD**를 구현한다.

| Method | Action             | 역할                |
| ------ | ------------------ | ----------------- |
| GET    | index/**r**etrieve | 모든/특정 리소스를 **조회** |
| POST   | **c**reate         | 리소스를 **생성**       |
| PUT    | **u**pdate         | 리소스를 **갱신**       |
| DELETE | **d**elete         | 리소스를 **삭제**       |

### REST API 중심 규칙

URI는 자원을 표현하는데 집중하고, 행위에 대한 정의는 HTTP Method를 통해 하는 것이 설계의 중심 규칙이다.

* **URI는 자원을 표현하는데 집중** : 리소스명은 동사보다 명사를 많이 사용한다.

```
# 안좋은예
GET /getBooks/1
GET /books/show/1

# 좋은예
GET /books/1
```

* **행위에 대한 정의는 HTTP Method를 통해 한다.**

```
# 안좋은예
GET /books/delete/1

# 좋은예
DELETE /books/1
```

## 참고링크

* <https://meetup.toast.com/posts/92>
* <https://poiemaweb.com/js-rest-api>
* <https://www.django-rest-framework.org/tutorial/quickstart/>
