Representational state transfer의 약자로 2000년에 Roy Fielding(로이 필딩)의 논문에 처음 등장한 용어입니다. REST는 분산 하이퍼미디어 시스템의 구조화 스타일에 대해 다룹니다. ‘분산 하이퍼미디어 시스템’은 웹을 지칭합니다. 클라이언트와 서버 간의 효율적인 통신을 지원합니다.
리소스가 URI로 식별되야 합니다.
HTTP method로 리소스를 조작해야 한다.
Self-Descriptive Messages(자체 표현 구조)
아래의 메세지를 보고 무슨 의미인지 알 수 있을까요? 물론 유추는 할 수 있을 겁니다.
{"id": 1, "name": "테스트"}
문제는 메세지만 보고서
id가 어떤 의미인지? name이 사람의 이름인지 동물의 이름인지 어떤 제품의 이름인지 알기 어렵습니다.위의 문제점을 고쳐 Self-Descriptive Messages로 표현 해 봅시다.
1 HTTP/1.1 200 OK
2 Content-Type: application/json
3 {"id":1, "name":"테스트"}
이렇게 하면 1번 과 2번 의 문제는 해결할 수 있습니다. 하지만 3번은 아직도 해결하지 못했습니다.
3번은 두 가지 방법을 통해 해결을 할 수 있습니다.
어플리케이션의 상태를 Hypermedia를 통해 전이 해야 한다.
REST에서 가장 중요한 기본 규칙은 두 가지입니다.
1. URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다 명사를 사용)
# bad
GET /members/show/1
#good
GET /members/1
URI는 자원을 표현하는데 중점을 둬야 합니다. show라는 행위(동사)는 이미 GET이라는 HTTP Method로 충분히 표현이 가능합니다.
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)으로 표현한다.
#bad
GET /members/delete/1
#good
DELETE /members/1
위 코드에서 #bad 코드를 보면 URI에 delete라는 동사가 들어가서 1번 원칙을 위배합니다.
delete라는 행위를 하고 싶다면 2번 원칙처럼 HTTP Method를 사용해서 표현해야 합니다.
HTTP Method
| Method | Action | 역할 | 페이로드 |
|---|---|---|---|
| GET | index/retrieve | 모든/특정 리소스를 조회 | x |
| POST | create | 리소스 생성 | o |
| PUT | replace | 리소스의 전체를 교체 | o |
| PATCH | modify | 리소스의 일부를 수정 | o |
| DELETE | delete | 모든/ 특정 리소스 삭제 | x |
응답 코드
https://www.restapitutorial.com/httpstatuscodes.html#
서버의 응답에는 작업 성공에 대한 정보를 클라이언트에 알리는 상태 코드가 포함되어 있습니다. 개발자로서 모든 상태 코드를 알 필요는 없지만(상태 코드가 많음) 가장 일반적인 상태 코드와 사용 방법은 알아야 합니다.
| 상태코드 | 의미 |
|---|---|
| 200 (OK) | 성공적인 HTTP 요청에 대한 응답 코드입니다. |
| 201 (CREATED) | 성공적으로 생성된 HTTP 요청에 대한 응답 코드입니다. |
| 204 (NO CONTENT) | 성공적인 HTTP 요청에 대한 응답이지만, 응답 본문에 아무것도 반환되지 않습니다. |
| 400 (BAD REQUEST) | 잘못된 요청 구문, 잘못된 클라이언트 요청에 대한 응답 코드입니다. |
| 403 (FORBIDDEN) | 클라이언트가 엑세스 권한이 없는 리소스에 요청을 했을 때 응답 코드입니다. |
| 404 (NOT FOUND) | 삭제되었거나 아직 존재하지 않을 수 있는 리소스에 요청하였을 때 응답 코드입니다. |
| 500 (INTERNAL SERVVER ERROR) | 서버에 문제가 있을 경우 사용하는 응답 코드입니다. |
https://aws.amazon.com/ko/what-is/restful-api
https://meetup.nhncloud.com/posts/92[https://velog.io/@kms8571/REST를-위한-uniform-interface](https://velog.io/@kms8571/REST%EB%A5%BC-%EC%9C%84%ED%95%9C-uniform-interface)https://poiemaweb.com/js-rest-api#:~:text=%233.-,REST
https://shoark7.github.io/programming/knowledge/what-is-rest