스프링부트 API - REST API 란? 스프링부트로 API만들기
개요
REST API 란 무엇이며, 스프링부트에서 RESTful 한 API를 만들기위해 어떤방식으로 설계및 구현할지 알아보기위해 포스팅합니다.
API 란?
API는 Application Programming Interface의 줄임말로 응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스를 뜻합니다. API를 사용하면 내부 동작 로직을 알지못해도 정의되어 있는 기능으로 쉽게 사용할 수 있게됩니다.
여기서 Interface란 어떤 장치간에 정보 교환을 위한 수단이나 방법을 의미하며 대표적으로 마우스, 키보드 등이 해당됩니다.
REST 란?
REST는 Representational State Transfer 의 줄임말로 자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것을 의미하고,
서버와 클라이언트의 상호 통신 방식중 하나입니다. HTTP URI( Uniform Resource Identifier ) 를 통해 자원을 명시하고 HTTP Method를 통해 자원을 교환하는 것이죠. * HTTP Method = Create, Read, Update, Delete (CRUD의 기능)
REST의 특징(규칙)
- Server-Client : 자원이 있는 쪽이 Server, 요청하는 쪽이 Client로 클라이언트와 서버가 독립적으로 분리되어 있어야함
- Stateless : 요청간에 클라이언트 정보가 서버에 저장되지 않음, 서버는 각각의 요청을 완전히 별개의 것으로 인식하여 처리
- Cacheable : HTTP 프로토콜을 그대로 사용하기에 HTTP의 특징인 캐싱 기능을 적용하여 대량의 요청을 효율적으로 처리
- Layered System : 계층화라고 하며, 클라이언트는 서버의 구성과 상관없이 REST API 서버로 요청, 서버는 다중 계층으로 구성될 수 있음 (로드밸런싱, 보안, 캐시 등)
- Code on Demand (Optional) : 요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트(로직)을 전달하여 클라이언트 기능 확장
- Uniform Interface : 인터페이스의 일괄성, 정보가 표준 형식으로 전송되기 위해 구성 요소간 통합 인터페이스를 제공, HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하게끔 설계
REST 장점
- HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 사용가능한 높은 호환성
- 서버와 클라이언트의 역할을 명확하게 분리함으로 구분
- 여러 서비스 설계에서 생길 수 있는 문제를 API단위로 나누기에 최소화
REST API 란?
REST 아키텍처의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스를 뜻하며 (REST + API)
일반적으로 REST 아키텍처를 구현하는 웹 서비스를 RESTful 하다고 표현한다.
REST를 기반으로 시스템을 분산하여 확장성과 재사용성을 높이고, HTTP 프로토콜의 표준을 따르고 있어
특정 프로그래밍 언어에 종속되지 않고 다양한 환경에서 구현할 수 있음
설계 규칙
- 웹 기반의 REST API를 설계할 경우에는 URI를 통해 자원을 표현해야 함
- https://goodthinking.tistory.com/member/22 ( Resource : member, Resource id : 22)
- 자원에 대한 조작은 HTTP Method(CRUD)를 통해 표현해야 함
- URI에 행위가 들어가면 안되며, Header 를 통해 CRUD를 표현하여 동작을 요청
- 메세지를 통한 리소스 조작
- Header 를 통해 content-type을 지정하여 데이터를 전달, 대표적으로 HTML, XML, JSON....
- URI에는 소문자만 사용
- Resource의 이름이나 URI가 길어질 경우 하이픈(-)을 통해 가독성을 높임, 언더바(_)는 지양
- 파일 확장자를 표현하지 않음