190130 REST API
REST API
REST(Representational State Transfer) API
-
WWW(World Wide Web)의 자원에 주소를 지정하고, 지정된 주소의 자원을 프로그래밍적으로 제어할 수 있게 만든 인터페이스
-
클라이언트-서버 간 메시지 교환을 통해 서로 통신
-
프로토콜 : 통신 간의 규약. 웹 상에서는 HTTP 프로토콜을 이용한다.
- 인증,권한…. 다양한 메시지를 요청하고 수신한다.
- 따라서 프로토콜이 짧고 단순할수록 네트워크의 부하 측면에서는 훨씬 유리하다
- 또 프로토콜이 제각각이라면 관리하기 힘들어진다. - 약속을 통해 비슷한 구조를 유지한다.
-
API : 서비스 간 주소와 메시지를 주고받기 위한 명세
-
REST
-
네트워크 아키텍처 원리의 모음
-
네트워크 아키텍처 원리? 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반
-
웹상의 자료를 HTTP위에서 SOAP이나 쿠키를 통한 세션트래킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스
-
SOAP(Simple Object Access Protocol)
-
HTTP,HTTPS,SMTP등을 통해 XML기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜
-
웹 서비스에서 기본적인 메시지를 전달하는 기반
-
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <getProductDetails xmlns="http://warehouse.example.com/ws"> <productId>827635</productId> </getProductDetails> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
-
-
-
-
HTTP/WWW이 아닌 아주 커다란 소프트웨어 시스템 설계 가능
-
리모트 프로시저 콜 대신 간단한 XML/HTTP인터페이스 이용 설계 가능
-
REST 인터페이스의 목표
- 구성 요소 상호작용의 규모 확장성
- 인터페이스 범용성
- 구성 요소의 독립적 배포
- 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 캡슐화
-
REST의 특징
- Uniform
- URI로 지정한 리소스에 대한 조작 통일, 한정적 인터페이스로 수행
- Stateless
- 무상태성
- 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
- 세션정보/쿠키정보를 별도로 저장/관리하지 않는다 - 들어오는 요청만 단순 처리
- 서비스 자유도 높임, 구현이 단순해짐
- Cacheable
- 기존 웹 표준을 그대로 사용하기 때문에 기존 웹 인터페이스 활용 가능
- modified태그, e-tag를 이용한 캐싱 구현
- Self-descriptiveness(자체 표현 구조)
- REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조
- Client-server
- REST서버: API 제공 / 클라이언트: 사용자 인증, 컨텍스트(세션,로그인정보)직접 관리
- 클라이언트와 서버에서 개발해야 할 내용이 명확, 서로간 의존성 감소
- layered structure
- 다중 계층으로 구성, 구조상의 유연성 증가
- 로드밸런싱,암호화 계층 추가
- proxy, 게이트웨이 등 네트워크 기반의 중간매체 사용 가능
REST 디자인 가이드
-
URI는 정보의 자원을 표현해야 한다
- 리소스명은 동사보다 명사 사용
DELETE /members/1
-
자원에 대한 행위는 HTTP Method(GET/POST/PUT/DELETE)로 표현한다
-
HTTP Method의 알맞은 역할?
METHOD 역할 POST 리소스를 생성한다 GET 해당 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다 PUT 해당 리소스를 수정한다 DELETE 리소스를 삭제한다
-
URI 설계시 주의할 점
-
슬래시 구분자는 계층 관계를 나타내는 데 사용
http://example.com/animals/mammals/whales
-
URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
http://example.com/animals/mammals/whales/ (X) http://example.com/animals/mammals/whales (O)
-
불가피하게 긴 URI경로 사용시 하이픈(-)을 사용, 가독성 높임
-
밑줄(_)은 URI에 사용하지 않는다(가독성)
-
URI경로에는 소문자가 적합
-
파일 확장자는 URI에 포함시키지 않는다.
-
accept header 이용
GET /members/soccer/345/photo HTTP/1.1 Host:example.com Accept: image/jpg
-
리소스간 관계 표현 방법
/리소스명/리소스ID/관계있는 다른 리소스명
GET: /users/{userid}/devices (일반적으로 소유관계 표현시)
자원 표현 - Collection, Document
-
document : 문서/ 한 객체
-
collection: 문서/객체의 집합
-
모두 리소스라고 표현할 수 있으며, URI에 표현된다.
http://example.com/sports/soccer/players/12
sports, players 컬렉션 / soccer,12 도큐먼트
HTTP 응답 상태 코드
상태 코드 | |
---|---|
200 | 클라이언트 요청 정상 수행 |
201 | (POST를 통한 리소스 생성 작업시)클라이언트가 어떤 리소스 생성 요청, 해당 리소스가 성공적으로 생성됨 |
301 | 클라이언트가 요청한 리소스에 대한 URI가 변경되었음(응답시 location header에 변경된 URI를 적어야 함) |
400 | 클라이언트의 요청이 부적절함 |
401 | 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청함 |
403 | 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청함 (403보다 400/404 사용 권고 - 403 자체가 리소스가 존재한다는 뜻이기 때문) |
404 | 찾는 리소스가 없음 |
405 | 클라이언트가 요청한 리소스에서는 사용 불가능한 메소드를 이용했을 경우 |
500 | 서버에 문제가 있음 |
추가 참고: 위키피디아: HTTP 상태 코드