이번 포스팅은 REST API란 무엇인지
알아보는 시간을 가지겠습니다.
1) REST 란 무엇인가?
먼저 REST가 무엇인지 부터 알아보겠습니다.
REST는 "REpresentational State TransFer" 의 약자로, 자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것을 의미합니다.
자원
- 흔히 말하는 데이터
- 데이터의 상태
- ex) 시간이라는 개념이있다면 지금 과 말하고있는 시간을 상태라고한다.
REST는 기본적으로 웹의 기존 기술과 HTTP프로토콜을 그대로 활용하기때문에, 웹의 장점을 최대한 활용할수 있는 아키텍처 스타일 입니다.
HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP Method를 통해 자원을 교환하는것입니다.
HTTP Method : Create, Read,Update,delete
URI 와 URL의 차이점?
URL은 Uniform Resource Locator로 인터넷 상 자원의 위치를 의미합니다.반면 URI는 Uniform Resource Identifier로 인터넷 상의 자원을 식별하기 위한 문자열의 구성으로,URI는 URL을 포함하게 됩니다. URI가 URL보다 포괄적인 범위라고 할 수 있습니다.
2) REST의 구성
1. 자원 - URI
- 모든 자원에는 고유한 ID가 존재하고 Server에 존재한다.
- 자원을 구별하는 ID는 /maanage/newpost 와 같은 HTTP URI입니다.
- Client는 URI를 이용해 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청합니다.
2. 행위 - Method
- HTTP 프로토콜의 Method를 사용합니다.
- HTTP 프로토콜은 GET,POST,PUT,PATCH,DELETE의 Method를 제공합니다 (CRUD)
3. 표현
- Client와 Server가 데이터를 주고받는 형태로 JSON, XML, TEXT, RSS 등이 있습니다.
- JSON, XML, 을 통해 데이터를 주고 받는 것이 일반적입니다.
3) REST의 특징
1. Server-Client 구조
- 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 됩니다.
- REST Server는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임지고,
- Client는 사용자 인증이나 context( 세션, 로그인 정보 ) 등을 직접 관리하고 책임집니다.
- 클라이언트와 서바가 독립적으로 분리되어있어야합니다.
- 자원을 공유하는 교집합이 없어야합니다 ex) 별도의 DB를 두어서 각각 충돌하지않게 해야합니다.
2. Stateless
- Client의 context를 Server에 저장하지 않습니다.
- 즉, 세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현이 단순해집니다.
- Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리합니다.
- 각 API 서버는 Client의 요청만을 단순 처리합니다.
- 즉, 이전 요청이 다음 요청의 처리에 연관되어서는 안됩니다. ( DB에 의해 바뀌는 것은 허용 )
- Server의 처리 방식에 일관성을 부여하기 때문에 서비스의 자유도가 높아집니다.
3. Cacheable
- 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있습니다.
- 즉, HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있습니다.
- 대량의 요청을 효율적으로 처리할 수 있습니다.
4. Layered System (계층화)
- Client는 REST API Server만 호출합니다.
- REST Server는 다중 계층으로 구성될 수 있습니다.
- 보안, 로드 밸런싱, 암호화 등을 위한 계층을 추가하여 구조를 변경할 수 있습니다.
5. Uniform Interface (인터페이스 일관성)
- URI로 지정한 Resource에 대한 요청을 통일되고, 한정적으로 수행하는 아키텍처 스타일을 의미합니다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하며, Loosely Coupling(느슨한 결함) 형태를 갖습니다.
- 즉, 특정 언어나 기술에 종속되지 않음
6. Code on Demand (Optional)
- 요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트(로직)을 전달하여 클라이언트 기능 확장합니다.
4) REST API란?
REST 아키텍처의 조건을 준수하고 있는 어플리케이션 프로그래밍 인터페이스를 뜻합니다.
최근 많은 API가 REST API로 제공되고있습니다.
- OpenAPI(누구나 사용할수 있도록 공개된 API:구글 맵, 공공 데이등) 제공하는 기업 대부분이 제공합니다.
일반적으로 REST아키텍처를 구현하는 웹서비스를 RESTful하다고 표현합니다.
REST API의 특징은
REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높일수있습니다.
HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할수 있습니다.
5) REST API 설계 규칙
REST API 설계규칙은 다음과같습니다.
- 웹 기반의 REST API를 설계할 경우에는 URI를 통해 자원을 표현해야합니다.
- https://thinkground.studio/member/589
- Resource : member
- Resource id : 589
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, PATCH, DELETE)로 표현한다.
- URI에 행위가 들어가면 안된다.
- HEADER를 통해 CRUD를 표현하여 동작을 요청해야합니다.
- 메세지를 통한 리소스를 조작합니다.
- HEADER를 통해 content-type을 지정하여 데이터를 전달합니다.
- 대표적인 형식으로는 HTML,JSON,TEXT형식이있습니다.
- 슬래시 구분자는(/) 계층관계를 나타냅니다.
- thinkground.studio/member/
- thinkground.studio/member/id/2
- 하이픈(-)은 URI 가독성을 높이는데 사용됩니다.
- URI를 쉽게 읽고 해석하기 위해, 불가피하게 긴 URI경로를 사용하게된다면 하이픈을 사용해 가독성을 높일수 있습니다.
- 언더바( _ ) 는 사용하지 않습니다.
- 글꼴에 따라 다르긴 하지만 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 합니다.
- URI는 소문자를 사용합니다.
- URI 경로에 대문자 사용은 피합니다.
- 대문자에 따라 다른 리소스로 인식하기 때문에 RFC 3986은 URI 스키마 호스트를 제외하고는 대문자를 구별하도록 규정 되어있습니다.
- 파일 확장자는 URI에 포함시키지 않습니다.
- REST API에서는 메세지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않습니다.
📚 Reference
https://dev-coco.tistory.com/97
REST란? REST API 와 RESTful API의 차이점
참고 REST(REpresentational State Transfer)란? REST의 정의 "REpresentational State Transfer" 의 약자로, 자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다. 즉, 자원(
dev-coco.tistory.com
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-REST-API-%EC%A0%95%EB%A6%AC
[WEB] 🌐 REST API 구성/특징 총 정리
REST API의 탄생 REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그
inpa.tistory.com
https://gwamssoju.tistory.com/82
REST란? REST API 와 RESTful API
REST란? REST는 REpresentational State Transfer의 약자다. 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 것을 의미한다. 월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프
gwamssoju.tistory.com
https://youtu.be/lceS3HbGXt4?si=V4aJ-taAQwgfbOYe