1. REST - Representational State Transfer
- 서버와 클라이언트 간 통신 방식 중 하나로, 자원을 이름으로 구분하여 자원의 상태를 주고받는다.
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)를 명시하고,
- HTTP Method(POST, GET, PUT, DELETE, PATCH)등을 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.
자원의 표현
- URI
- REST에서 자원을 구분하고 처리하기 위해 사용
- URI를 잘 네이밍할수록 API가 직관적이고 사용하기 쉽다
- ex) /books, /join
- singleton and Collection Resources
- URI는 singleton이나 collection
- /customer (singleton resource)
- /customers (collection resource)
- Collection and Sub-collection Resources
- URI는 서브 컬렉션을 포함할 수 있다
- 특정 고객의 계좌?
- /customers/{customerId}/accounts
URI 네이밍 규칙
- 명사를 사용해서 자원을 표현한다
- /crews : 크루들의 정보
- 예외적으로 동사를 허용하는 경우 (controller)
- /game/play에 접근 시 게임이 시작된다면?
- 게임의 시작 여부를 컨트롤하는 URI
- 동사 play로 표현
- 자원 간 계층 관계를 표현하기 위해 / (슬래시) 사용
- /crews/frontend
- 하이픈 (-) 기호를 사용하여 URI의 가독성을 향상할 수 있다.
- /profilemanagement (X)
- /profile-management (O)
- URI에는 가급적 밑줄을 사용하지 않는다. (_)
- URI는 소문자를 사용한다.
- URI에는 파일 확장자를 표시하지 않는다.
- URI에 CRUD 함수의 이름을 사용하지 않는다.
- /create/crews (X)
- /add/crews (X)
- HTTP 메서드를 사용하면 된다!
HTTP 메서드 - 자원의 상태를 주고 받기 위해 사용하는 메서드
- GET
- POST
- PUT
- PATCH
- DELETE
URI에 CRUD 함수의 이름을 사용하지 않는것을 권장한다. 그렇다면 어떻게 표현할까?
- 유저 리스트를 얻어오고 싶다면?
- /users + HTTP 메서드 GET
- 유저 리스트에 등록하고 싶다면?
- /users + HTTP 메서드 POST
- 같은 URI 사용 + 다른 동작(메서드)
- CRUD 메서드의 이름을 URI에 표현하지 않을 수 있다.
CRUD Operation
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말로 REST에서의 CRUD Operation 동작 예시는 아래와 같다.
- Create : 데이터 생성 (POST)
- Read : 데이터 조회 (GET)
- Update : 데이터 수정 (PUT, PATCH)
- Delete : 데이터 삭제 (DELETE)
REST 특징
- 서버-클라이언트 구조
- 무상태 (stateless)
- 캐시 처리 가능
- 계층화
- 인터페이스 일관성
REST의 장단점
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.
- HTTP 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
단점
- 표준 자체가 존재하지 않아 정의가 필요하다.
- HTTP Method 형태가 제한적이다.
- 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다. (익스플로어)
RESTful
- RESTful이란 REST의 원리를 따르는 시스템을 의미한다.
- 하지만 REST를 사용했다고해서 모두가 RESTful 한 것은 아니다.
- 모든 CRUD 기능을 POST로 처리하는 API 혹은 URI 네임 규칙을 올바르게 지키지 않은 API는 REST API의 설계 규칙을 올바르게 지키지 못할 뿐더러 RESTful하지 못한 시스템이라고 할 수 있다.
출저
인프런 강의 모든 개발자를 위한 HTTP 웹 기본 지식 (김영한 강사님)
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'HTTP' 카테고리의 다른 글
[HTTP] 암호화와 HTTPS (0) | 2023.01.31 |
---|---|
[HTTP] 트랜스포트 계층 (0) | 2023.01.31 |
[HTTP] 네트워크 서비스와 애플리케이션 계층 (0) | 2023.01.30 |
[HTTP] 컴퓨터 네트워크 (0) | 2023.01.30 |