[Web] REST API와 API 정리
업데이트:
REST API
Representational State Transfer(REST)
위키에서는 REST에 관해 다음과 같이 정의한다.
WWW와 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 아키텍처의 형식
- 엄격한 의미로 REST는 자원을 정의하고 자원에 대한 주소를 지정하는 방법인 네트워크 아키텍처 원리의 모음이다.
- 간단한 의미로는 웹 상의 자료를 HTTP위에서 SOAP나 쿠키를 통한 세션 트래킹 같은 별도의 전송 계층 없이 전송하기 위한 인터페이스를 말한다. -Wiki
오늘날 웹에서 가장 많이 볼 수 있는 API로써 유연함이 강점이다. 클라이언트가 서버에 요청을 데이터로 전송하고 서버가 이 클라이언트 입력을 사용해 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환한다. 완전히 와닿지 않지만 아래 REST API 아키텍처의 특징을 통해 이해를 도울 수 있다.
REST 아키텍쳐의 특징
다음 내용은 REST 아키텍처의 특징이다. 반대로 말하면 아래의 조건들을 충족하지 못하면 RESTful하지 못한 API라고 이해함으로써 왜 RESTful한 API를 구현해야하는지 생각해볼 수 있었다.
-
클라이언트-서버
사용자 인터페이스에 대한 관심을 데이터 저장에 대한 관심으로부터 분리해 클라이언트의 이식성과 함께 서버의 규모 확장성을 개선한다. -
무상태
클라이언트에 대한 상태를 저장하지 않는다. 모든 요청에 공통적으로 필요한 모든 정보를 내포해 가시성이 좋아지며 이에따라 요청 실패시 복원이 쉽다(신뢰성이 좋다). 또한 상태를 저장할 필요가 없기 때문에 규모확장성이 좋아진다. -
캐시
캐시가 가능해야한다. http 프로토콜 표준에서 지원하는 Last-Modified 태그, E-Tag를 이용해 캐싱 구현이 가능하다. -
균일한 인터페이스
URI로 지정한 리소스에 대한 조작을 한정적이고 통일된 인터페이스를 통해 수행한다. -
계층화된 시스템
REST 서버는 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 증가시킬 수 있고 프록시와 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다. 또, 다중 계층으로 구성될 수 있다.
Application Programming Interface(API)
어플리케이션 소프트웨어를 개발하기 위한 서브루틴, 정의, 프로토콜과 도구들의 모음
- 좀 더 간단히 말했을 때 다양한 소프트웨어 컴포넌트들 간의 명확히 정의된 커뮤니케이션의 방법이다.
- API는 OS, 웹 기반 시스템, 데이터베이스 시스템, 컴퓨터 하드웨어나 소프트웨어 라이브러리와 같이 광범위한 곳에 이용될 수 있다.
예로 우리가 휴대폰을 통해 확인하는 날씨는 기상청의 소프트웨어 시스템과 휴대폰이 통신함으로써 얻을 수 있는 정보이다. API는 생성된 시기와 이유에 따라 4가지 방식으로 작동할 수 있다.
-
SOAP API
단순 객체 접근 프로토콜을 사용한다. 클라이언트와 서버는 XML을 사용해 메시지를 교환하며 유연성이 떨어져 과거에 사용했다. -
RPC API
클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송한다. 원격 프로시저 호출이라고도 한다. -
WebSocket API
JSON 객체를 사용해 데이터를 전달하는 또 다른 최신 웹 API로써 클라이언트 앱과 서버 간 양방향 통신을 지원한다. 서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적인 측면을 가지고 있다. -
REST API
REST + API = REST API
REST API란 즉, REST 아키텍쳐 스타일을 따르는 API이다. RESTful API에 대한 성숙도는 Level 1 ~ Level 3가 존재하는데, 그 내용은 아래와 같다.
-
Level1
원하는 포맷으로 Resource를 제공할 수 있다. -
Level2
적절한 Http 메소드를 사용하고 있다. -
Level3
모든 리소스에 대한 연결성을 제공한다.(이 API를 통해 어떤 행위를 할 수 있는지 정보를 제공한다.)
RESTAPI 설계 가이드
다음은 RESTAPI를 구현, 설계 할 때의 주요한 가이드이다. 더욱 자세한 가이드는 이곳을 참조하면 좋을 것 같다.
- URI 정보는 동사가 아닌 명사로 자원을 표현해야한다.
- 자원에 대한 행위는 HTTP Method로 표현해야한다(행위는 URI의 마지막에 표현한다).
- slash(/)는 계층 관계를 나타내는데 사용해야한다
- URI의 마지막 문자로 Slash를 포함하지 않는다.
- hyphen(-)은 URI 가독성을 높이는데 사용한다.
REST with Spring
REST API 개발을 위해 Spring에 애너테이션이 추가되었다.
대표적으로는 RequestBody, ResponseBody이다.
-
RequestBody
전달 받은 요청 메시지를 원하는 형태로 변환이 가능하다
-
ResponseBody
원하는 클래스가 원하는 RequestBody로 변환된다.
Reference.
API, RESTAPI
https://aws.amazon.com/ko/what-is/api/
RESTAPI 설계 가이드
https://sanghaklee.tistory.com/57
댓글남기기