REST API(Representational State Transfer)
🐥 REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다. 즉 REST란 HTTP URI를 통해 자원을 명시하고, HTTP METHOD( POST / GET / PUT / DELETE )를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미합니다.
CRUD Operation이란
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말로 REST에서의 CRUD Operation 동작 예시는 다음과 같다.
CREATE : 데이터 생성 (POST)
READ : 데이터 조회 (GET)
UPDATE : 데이터 수정 (PUT)
DELETE : 데이터 삭제 (DELETE)
REST 구성
- 자원 (Resource) - HTTP URI
- 자원에 대한 행위 (Verb) - HTTP METHOD
- 자원에 대한 행위의 내용 (Representations) - HTTP Message Pay Load
REST 특징
- 서버 - 클라이언트 구조 ( Server - Client )
- 클라이언트와 서버는 서로 간에 완전히 독립적이어야 합니다. 클라이언트 쪽이 알아야 하는 유일한 정보는 요청된 리소스의 URI이며, 이는 다른 방법으로 서버와 상호작용 할 수 없습니다. 즉 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 됩니다.
- 무상태 ( Stateless )
- 작업을 위한 상태정보를 다로 저장하고 관리하지 않습니다. 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다.
- 캐시 처리 가능 ( Cacheable )
- HTTP라는 기존 웹 표준을 그대로 사용하기 때문에 웹에서 사용하는 기존 인프라를 그대로 활용이 가능합니다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능합니다.
- 계층화 ( Layered System )
- REST 서버는 다중 계층으로 구성될 수 있습니다. API 서버는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있습니다.
- 프록시, 게이트웨어 같은 네트워크 기반의 중간 매체를 사용할 수 있습니다.
- 인터페이스 일관성 ( Uniform Interface )
- 요청이 어디에서 오는지와 무관하게 동일한 리소스에 대한 모든 API요청은 동일하게 보여야 합니다.
- 온디맨드 코드 ( Code-on-demand )
- 서버에서 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있습니다.
REST API 디자인 가이드
- URI는 정보의 자원을 표현해야 합니다. (리소스명은 동사보다는 명사를, 대문자보다는 소문자를 사용합니다.)
- 자원에 대한 행위는 HTTP METHOD로 표현합니다.
- 마지막에 슬래시(/)를 포함하지 않습니다.
- 언더바 대신 하이폰을 사용합니다. ( _ ⇒X / - ⇒ O)
- 파일 확장자는 URI에 포함하지 않습니다. ( photo.jpg ⇒ photo )
GET /members/delete/1
위의 예시는 REST를 제대로 적용하지 않은 URI입니다. URI는 자원을 표현하는 데 중점을 두어야 합니다. delete와 같은 행위에 대한 표현이 들어가면 안된다는 말입니다.
👉 수정한 API
DELETE /members/1
회원정보를 가져오는 URI
GET /members/show/1 (x)
GET /members/1 (o)
URI (Uniform Resource Identifier)
URI란 인터넷에 있는 자원을 나타내는 유일한 주소입니다.
- URI, URL(Uniform Resource Locator), URN(Uniform Resource Name)의 차이는 아래 그림 참고
연관된 개념인 Scheme (Protocol) , Host (Domain) , Port, Path , Query String, Search, Fragment 는 아래 그림 참고
REST API의 파라미터
- header 파라미터
- 보통 인증과 권한 부여
- path 파라미터
- 엔드 포인트의 일부 {estateid}에는 각각 값이 들어갑니다.
/estates/{estateid}
- query string 파라미터
- 엔드 포인트에서 물음표 뒤에 등장하는 쿼리 파라미터는 아래의 형식입니다.
/estates?query=맛집
⇒ path 파라미터는 특정 리소스를 정의할 필요가 있을 때, query 파라미터는 정렬 혹은 필터링이 필요할 때 사용합니다.
HTTP 메소드
주요 메소드 ( 5가지 )
📖
GET : 리소스 조회, URI가 가진 정보를 검색하기 위해 서버측에 요청하는 형태
POST : 요청 데이터 처리, 주로 데이터 등록에 사용
PUT : 리소스를 대체, 해당 리소스가 없으면 생성
PATCH : 리소스를 일부만 변경
DELETE : 리소스 삭제
기타 메소드 ( 4가지 )
📖
HEAD : GET과 동일하지만 메시지 부분을 제외하고 상태 줄과 헤더만 반환, 웹 서버에서 헤더 정보 이외에는 어떤 데이터도 보내지 않음
OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명 (주로 CORS 에서 사용) 지원되는 메소드 종류를 확인 할 수 있음
CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정, 웹 서버에 프락시 기능을 요청할 때 사용됨
TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
HTTP 응답 코드 종류
1XX : 정보전달: 요청을 받았고, 작업을 진행 중이라는 의미입니다.
2XX : 성공 !
3XX : 리다이렉션 : 이 요청을 완료하기 위해서는 리다이렉션이 이루어져야 한다는 의미입니다.
4XX : 클라이언트 오류 (이 요청은 올바르지 않라는 의미입니다.)
5XX : 서버가 응답할 수 없다는 의미이며, 요청이 올바른지의 여부는 알 수 없습니다.
'TIL > 2022 TIL' 카테고리의 다른 글
| xxx 타입스크립트(Element형식에 checked 속성이 없습니다. ) (1) | 2022.07.28 |
|---|---|
| 스택과 큐 (1) | 2022.07.25 |
| Next.js환경에서 카카오 맵 api 불러오기 (0) | 2022.07.20 |
| Recursion 재귀함수 (0) | 2022.07.12 |
| 자바스크립트 Array 고차함수 정리 2(sort / some/ every /find /findIndex) (0) | 2022.07.06 |