REST API
2020. 5. 22. 17:11ㆍ개발노트
API란?
쉽게 말해서 서버와 클라이언트가 서로 정보(data)를 교환할 수 있도록 하는 것
REST API란?
예를 들자면 구글 맵을 이용하고 싶거나 기상청의 날씨 데이터를 가져올 때 API를 사용하는 것(Open API)
그리고 웹 페이지를 이동 할 때 필요한 정보를 전달하는 것
기본적으로 HTTP동작 방식(서버와 클라이언트 사이의 요청, 응답)을 사용
REST API의 구성요소는 크게 3가지가 있다.
- Resource(자원) - URI
- Verb(행위) - HTTP Method
- Repressentations(표현) - Json, xml 등
위 구성요소의 자원에 URL이 아닌 URI가 쓰여있다.
무엇이 다른 걸까?
- URL은 자원의 위치 즉, 파일(HTML 문서)의 위치를 의미
- URI는 인터넷 상의 자원을 식별하기 위한 문자열(URI에는 요청을 위한 id, pw 등이 포함될 수 있다.)
메서드의 종류
- GET - 정보를 가져와서 조회하기 위해서 사용되는 방식
- URL에 변수를 포함시켜 요청
- 데이터를 헤더에 포함하여 전송
- URL에 데이터가 노출되어 보안에 취약
- 전송 길이에 제한이 있음
- 캐싱할 수 있음(재 요청 시 빠른 접근을 위해 레지스터에 데이터를 저장시키는 것 ex. 즐겨찾기 저장)
- POST - 데이터를 서버로 제출해 추가, 수정하기 위해 사용하는 방식
- URL에 변수를 노출하지 않고 요청
- 데이터를 바디에 포함시켜 전송
- URL에 데이터가 노출되지 않아 보안성 좋음
- 전송 길이에 제한이 없음
- 캐싱이 불가능
- PUT - 정보를 업데이트하기 위해 사용
- DELETE - 정보를 삭제하기 위해 사용
REST API의 조건
- Uniform Interface(일관된 인터페이스)
- 요청에 대해 일관적으로 처리해야 한다.
- 클라이언트의 플랫폼에 무관하며 특정 언어, 기술에 종속받지 않아야 한다.
- Stateless(무상 태성)
- 서버는 각각의 요청을 별개의 것으로 인식하고 처리해야 한다.
- 쿠키, 세션에 작업을 위한 상태 정보를 저장, 관리하지 않는다.
- Cacheable(캐시 가능)
- 캐싱을 구현해 대량의 요청을 효율적으로 처리할 수 있어야 한다.
- Client-Server Architecture (서버-클라이언트 구조)
- API자원을 가지고 있는 쪽이 서버, 자원을 요청하는 쪽이 클라이언트
- 서버는 API를 제공, 클라이언트는 사용자 인증 등을 직접 관리하는 등 역할을 구분한다.
- Self-Descriptiveness(자체 표현)
- 요청 메시지(URI)만 보고 전달 내용, 어디로 전달하는지 등을 쉽게 이해할 수 있어야 한다.
- Layered System(계층 구조)
- 서버는 다중 계층으로 구성될 수 있고 계층을 추가, 변경할 수 있다.
- 클라이언트는 서버와 직접 통신하는지, 중간 서버와 통신하는지 알 수 없다.
왜 쓰는 걸까?
확장성과 재사용성을 높여 유지 보수, 운용이 편리해진다.
웹 개발 표준을 지키고 상호운용성 유지를 위해
(다른 웹 브라우저, 다른 OS, 다른 서버.... 에서 모두 동작이 가능하도록 하기 위해)