목표
- ResutfulAPI에 대해서 이해한다.
- RestfulAPI 이전의 SOAP에 대해서 이해한다.
데이터 통신 프로토콜
- 온라인 웹 프로그램은 동일한 규격을 가지고 있지 않음
- 서로 다른 언어, 서로 다른 플랫폼, 서로 다른 네트워크 등을 가짐
- 이러한 서로 다른 프로그램 간 데이터 통신을 위해
Application Programing Interface(이하 API)
가 탄생했음
API
를 구현하기 위해 Simple Object Access Protocol(이하 SOAP)
라는 방식이 W3C에서 공식 프로토콜로 지정됐음
SOAP
- SOAP는 W3C에 의해 지정된 공식 프로토콜
- 요청과 응답, 보안 등에 대한 통신 규격이 정해져있음
- WS-security: 고유 식별자(토큰)을 통한 메세지 보호 전송
- WS-ReliableMessaging: 신뢰할 수 없는 IT 인프라에 대한 메시지 간 오류처리
- WS-addressing: 웹 라우팅 주소를 SOAP 헤더 내의 메타데이터로 패키징
- Web Service Description Language(XML): 웹 서비스 작업의 수행과 서비스의 시작과 끝을 설명할 수 있음
- SOAP API를 통해 들어온 요청은 HTTP, SMTP, TCP 등의 계층 프로토콜을 이용하여 처리
- 응답 데이터의 경우 XML을 통해 데이터 포맷을 다루고 있으며, 해당 규격에 따라 데이터를 응답할 수 있도록 반드시 서비스 인터페이스가 필요함
- 데이터를 다루는
ACID
준수에 대한 규격이 정해져있기 때문에 금융 등 민감한 데이터를 주고받는 경우 많이 사용됨
RESTful API
Representational State Transfe(이하 REST)
API는 기존의 SOAP 프로토콜과 달리 웹 상에서 HTTP를 잘 사용하기 위해 만들어진 아키텍처
- 프로토콜 -> 반드시 지켜야함, 지키지 않으면 사용할 수 없음
- 아키텍처 -> 지켜야하는 기본적 규칙이 있지만 상세한 구현은 자유
RESTful API 특징
REST API는 HTTP 프로토콜을 기본으로 만들어진 아키텍처로 다음과 같은 특징을 가짐
- Uniform Interface
URI로 특정 리소스에 대한 접근과 조작에 대한 인터페이스가 존재
- Stateless
상태를 저장하지 않음. 세션과 쿠키같은 별도의 정보를 저장하지만 관리하지 않음
- Cacheable
HTTP 프로토콜이 사용하는 캐싱 기능을 사용할 수 있음
- Self-descriptiveness
REST API 자체만으로 통신에 대한 표현이 가능함
- Client-Server
API를 제공하는 서버와 사용자 요청, 인증을 처리하는 클라이언트가 구분되어 있음
- 계층형 서버 구조
REST 서버는 HTTP 프로토콜 위에 여러 계층을 사용할 수 있음. 이를 통해 프록시, 게이트웨이 등을 사용한 로드밸런싱, 보안, 암호화 처리 등이 가능함
RESTful API 디자인
REST API는 HTTP 프로토콜에 대한 설계 규칙이 존재함
1. URI를 통해 정보의 자원을 표현해야 한다
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현되어야 한다
- GET 조회, 요청
- POST 생성, 추가
- PUT 수정
- DELETE 삭제
잘못된 REST API
GET /members/put/profile/{memberId}
올바른 REST API
PUT /members/profile/update/{memberId}
URI 설계 규칙
- 슬래시를 통해 계층 관계를 표현한다
https://restapi.com/document/sample/1
- URI의 마지막 문자는 슬래시를 제외한다
https://restapi.com/document/sample
- 하이픈을 사용하여 가독성을 높일 수 있다
https://rest-api.com/document/sample
- 밑줄은 사용하지 않는다
https://rest_api.com/document/sample (X)
- 소문자와 명사를 이용하여 명명한다
https://restapi.com/document/sample/{sampleId}
- 파일 확장자는 제외한다. 파일 확장자 대신 Content-type 헤더를 이용한다
https://restapi.com/document/sample/{sampleId}.txt
결론
- 규칙
- SOAP API: 프로토콜로서 표준 규격을 따라 반드시 구현되어야 함
- REST API: 아키텍처로서 설계 규칙은 있으나, 반드시 따르지 않아도 됨
- 데이터의 처리
- SOAP API: HTTP/SMTP/TCP/XML
- REST API: HTTP/JSON
- SOAP vs. REST
- SOAP: 민감한 데이터를 ACID 원칙에 따라 통신해야하는 경우
- REST: 일반적인 웹 서비스의 경우