본문 바로가기

STUDY/ETC

Restful API

REST (Representational State Transfer)

 

★ REST란?

- 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미

- 즉, 자원(resource)의 표현(representation)에 의한 상태 전달을 일컫는다

* 자원: 해당 소프트웨어가 관리하는 모든 것 ex) 문서, 그림, 데이터, 해당 소프트웨어 자체 등

* 표현: 그 자원을 표현하기 위한 이름 ex) DB학생 정보가 자원일 때, "students"를 자원의 표현이라고 함

* 상태(정보) 전달: 데이터가 요청되어지는 시점에서 자원의 상태를 전달 ex) JSON이나 XML을 통해 주고 받는 것이 일반적

- ROA(Resource Oriented Architecture)를 따르는 웹 서비스 아키텍처

- HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미

REST CRUD

Create : 생성 (POST)

Read : 조회 (GET)

Update : 수정 (PUT)

Delete: 삭제 (DELETE)

"URI와 HTTP 메소드를 이용해 객체화된 서비스에 접근하는 것"

 

REST 구성 요소

■ 자원 (Resource): URI

- 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재

- 자원을 구별하는 ID는 '/groups/:group_id'와 같은 HTTP URI

- Client는 URI를 이용해서 자원을 지정하고 해당 자원의 상태에 대한 조작을 Server에 요청

■ 행위 (Verb): HTTP Method

- HTTP 프로토콜의 Method를 사용

- HTTP 프로토콜은 GET, POST, PUT, DELETE와 같은 메서드를 제공

■ 표현 (Representation of Resource)

- Client가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보냄

- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태로 나타낼 수 있음

- JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적

 

 

REST 특징

■ Server-Client 구조 (자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client)

- REST Server는 API를 제공하고 비지니스 로직 처리 및 저장을 책임지고

- REST Client는 사용자 인증이나 context(세션, 로그인 정보) 등을 직접 관리하고 책임

- REST를 사용하면 서버와 클라이언트 간 의존성이 줄어듦

■ Stateless(무상태)

- 이전, 이후에 대한 직접적인 정보가 필요없이 직관적인 오브젝트에의 접근으로 서비스를 처리

- 세션정보를 보관할 필요가 없기 때문에, 서비스의 자유도 또한 높아지고 로드밸런싱이나 기타 유연한 아키텍처의 적용이 가능

- 쿠키와 세션이 필요없음

■ Cacheable(캐시 처리 가능)

- 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용 가능

- 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률이 향상됨

■ Layered System(계층화)

- Client는 REST API Server만 호출

- REST Server는 다중 계층으로 구성 가능

- Proxy, Gateway와 같은 네트워크 기반의 중간 매체를 사용 가능

■ Addressability(URI 접근)

- REST는 모든 유일한 Object에 대해 유일하고 직관적인 URI를 통해 접근하도록 함

- 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여

- Uniform Interface(인터페이스 일관성): URI로 지정한 리소스 조작을 통일되고 한정적인 인터페이스로 수행

REST 장점

- HTTP 프로토콜의 인프라를 그대로 사용하기 때문에 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없음

- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 사용 가능

- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능

- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장

- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악 가능

- 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화

- 서버와 클라이언트의 역할을 명확하게 분리

REST 단점

- 표준이 존재하지 않음

- 사용할 수 있는 메소드가 4가지밖에 없음

- HTTP Method 형태가 제한적

- 구형 브라우저가 지원해주지 못하는 부분 (PUT, DELETE, pushSTate)가 존재

REST의 필요성

- 애플리케이션 분리 및 통합을 해야할 때

- 다양한 클라이언트들이 등장했을 때

- 다양한 브라우저, 안드로이드폰, 아이폰과 같은 모바일 디바이스에서도 통신 가능한 서버 프로그램이 필요할 때

- 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처가 필요할 때

★★ 스프링에서의 REST

@ResponseBody 애노테이션을 지원하게 되면서 REST 방식의 처리를 지원, @RestController를 통해 구현 가능

REST API

★ REST API란?

- REST 기반으로 서비스 API를 구현한 것

- 최근 OpenAPI 마이크로 서비스 등을 제공하는 업체 대부분은 REST API를 제공

REST API 특징

■ 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 가능

■ REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현 가능

■ REST API를 제작하면 델파이 클라이언트 뿐 아니라 자바, C#, 웹 등을 이용해 클라이언트 제작 가능

REST API 설계 기본 규칙

■ URI는 정보의 자원을 표현해야 한다

- resource는 동사보다는 명사를, 대문자보다는 소문자를 사용

- resource의 도큐먼트 이름으로는 단수 명사를 사용

- resource의 컬렉션 이름으로는 복수 명사를 사용

- resource의 스토어 이름으로는 복수 명사를 사용

■ 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다

- URI에 HTTP Method가 들어가면 안됨

- URI에 행위에 대한 동사 표현이 들어가면 안됨 (CRUD 기능을 나타내는 것은 URI에 사용하지 않음)

- 경로 부분 중 변하는 부분은 유일한 값으로 대체 (id는 하나의 특정 resource를 나타내는 고유 값)

■ 슬래시 구분자( / )는 계층 관계를 나타내는 데 사용한다

■ URI 마지막 문자로 슬래시 구분자( / )를 포함하지 않는다

■ 하이픈( - )은 URI 가독성을 높이는데 사용한다

■ 밑줄 ( _ )은 URI에 사용하지 않는다

■ URI 경로에는 소문자가 적합하다 (대문자 사용은 피하도록 한다)

■ 파일 확장자는 URI에 포함하지 않는다

- Accept header를 사용

■ 리소스 간의 연관 관계가 있는 경우 /리소스명/리소스 ID/관계가 있는 다른 리소스명

 

 

RESTful

★ RESTful이란?

- REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어

- "REST API" 를 제공하는 웹 서비스를 "RESTful"하다고 할 수 있음

- 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭됨

RESTful 목적

- 이해하기 쉽고 사용하기 쉬운 REST API를 만들기 위해

- RESTful한 API를 구현하는 근본적인 목적은 성능 향상이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 목적

★★ RESTful 하지 못한 경우?

- CRUD 기능을 모두 POST로만 처리하는 API

- 라우트(route)에 Resource, id 외의 정보가 들어간 경우(/books/updateName)


'STUDY > ETC' 카테고리의 다른 글

SQL 기본 문법 - DML  (0) 2023.12.09
Github 사용법  (0) 2023.12.09