Rest-API
09 Jul 2017 | restRest-API
정의
Representational State Transfer ( 웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍쳐 )
-
장점 : URI 와 Http Method 만으로도 쉽게 의미를 파악할 수 있다. HTTP 의 장점을 그대로 사용 가능 ( 기존 인프라 사용, 캐쉬 등 )
-
단점 : 정확한 표준이 없다. 레거시 DB 구조에는 대응하기 어렵다.
관련 용어
TCP / IP 4 계층
- 애플리케이션 : HTTP, NTP, SSH, SMTP
- 트랜스포트 : UDP / TCP, 데이터의 무결성 보장
- 인터넷 : IP, 네트워크에서 실제로 패킷을 주고 받음
- 네트워크 인터페이스 : 이더넷, 물리적인 케이블, 네트워크 어댑터
HTTP 2.0
- 기존 버전(1.1) 의 속도 개선, 헤더 압축, 단일 TCP 커넥션에서 병렬 페이지 로딩 구현, 서버 PUSH 기능 등.
특징
주요 특성
- 유니폼 인터페이스
- 특정 언어나 기술에 종속되지 않는다.
- 스테이트리스
- 캐쉬 가능
- 콘텐츠에 변화가 없다면 304 응답으로 HTTP 캐쉬 사용 가능.
- 자체 표현 구조
- 직관적으로 이해 가능한 구조.
- 클라이언트 - 서버 구조
- 계층형 구조
멱등성
어떤 조작을 몇 번을 반복하더라도 결과가 동일한 것.
- GET, HEAD : 멱등이고 안전하다.
- PUT, DELETE : 멱등이지만, 안전하지 않다.
- POST : 멱등이지 않고, 안전하지도 않다.
REST 에서 POST 와 PUT 의 차이
POST 는 클라이언트에서 URI 를 결정할 수 없고, PUT 은 결정 가능하다.
- 트위터 글쓰기 ( POST ), wiki 글쓰기 ( PUT )
인증
- BASIC : 이름:패스워드를 Authorization 헤더에 넣어 전송.
- DIGEST : 이름:패스워드에 서버에서 전달받은 해쉬 값을 이용하여 sha-1 등으로 암호화해서 전송.
- 제 3 자 서비스 인증
- OpenId
- OAuth : 서비스간의 권한 위임. 데이타 전달과정을 동의 받아 수행.
- JWT
트랜젝션 보장 방법
- /transactions 등의 리소스를 만들어 트랜젝션으로 묶을 API 를 추가하고, 리소스 요청을 통해 커밋 메시지를 보내는 방법.
- 단일 API 내에서의 일괄 처리, 상위 리소스에서 조작.
베타 제어
- 비관적 잠금 ( Pessimistic Lock )
- 경합이 발생하지 않도록, 처음에 LOCK 을 걸고 시작.
- 낙관적 잠금 ( Optimistic Lock )
- 갱신 요청을 최종적으로 날릴 때, 변경 여부를 확인.
HATEOS
response 에 다음 액션이나, 관계된 리소스에 대한 HTTP 링크를 포함.
CORS
스크립트 동작을 허용할 서버를 지정 ( Access-Control-Allow-Origin : * )
보안
인증 방법
- API 키 방식 : 특정 사용자만 알수 있는 Key 를 사용.
- API 토큰 방식 : 기간이 유효한 토큰을 발급
- HTTP BASIC AUTH
- Digest Access Authentication
- 서버로 부터 받은 nonce 난수 값을 받고, 해쉬화하여 서버로 전송. 주로 SHA 사용
- 클라이언트 인증 추가
- 제 3자 인증 방식 ( OAuth )
- 파트너 서비스에서 자사 서비스 사용자의 인증을 거쳐서 권한 전달.
- IP 화이트 리스트 터널링
- Bi-directional Certification
- 클라이언트에서도 인증서를 가지고 양방향으로 SSL 제공.
- JWT
JWT
토큰 자체가 정보를 가짐으로서, 구현이 단순해진다.
- 장점 : 사용이 쉽고, 개발 부담이 적다. 서비스를 무상태로 유지 가능.
- 단점 : 토큰의 길이가 길어진다. 한번 토큰을 발급하면 중도 폐기가 불가능.
- 변조 방지를 위해 HMAC 방식의 알고리즘 사용
- HEADER.PAYLOAD.SIGNATURE