API 정의

Application Programming Interface : 응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제공할 수 있게 만든 인터페이스

  • 웹환경에서 API는 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세라고 표현할 수 있다.

RESTful API 정의

클라이언트(웹브라우저,모바일)가 필요한 자원이 있을때, 서버에게 요청하는 방식을 정의한 API 디자인

먼저, REST는 REpresentational State Transfer의 약자이다. API 설계의 중심에 자원(resource)이 있고, HTTP Method를 통해 자원을 처리하도록 설계하는 방식이다. REST API는, 자원,행위,표현으로 구성이 된다.

REST의 특징

Uniform Interface(유니폼 인터페이스)

Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍쳐 스타일이다.

Stateless(무상태성)

REST는 무상태성 성격을 갖는다. 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다. 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API서버는 들어오는 요청만을 단순히 처리하면 된다. 서비스의 자유도가 높어지고 구현이 단순하고 확장이 용이하다

Cacheable(캐시 가능)

HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 인프라를 그대로 활용 가능하다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능

Self-descriptiveness(자체 표현 구조)

REST API메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어 있어야 한다.

Client-Server구조

REST서버는 API제공, 클라이언트는 사용자 인증이나 세션,로그인 정보등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되서 의존성이 줄어든다.

계층형 구조

REST서버는 다중 계층오러 구성될 수 있으며 보안,로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고, PROXY,게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.

REST API 디자인

URI는 정보의 자원을 표현해야 한다. 자원에 대한 행위는 HTTP Method로 표현해야 한다.

URI는 정보의 자원을 표현해야 한다.(리소스명은 동사보다 명사 사용)

[잘못된 REST 디자인]

  • URI는 자원을 표현하는데 중점을 둬야한다. delete와 같은 행위에 대한 표현이 들어가면 안된다.
    GET /members/delete/1
    [올바른 REST 디자인]
    DELETE /members/1

HTTP Method 정리

  • post
    • 해당 URI를 요청하면 리소스를 생성
  • get
    • 해당 리소스를 조회
  • put
    • 해당 리소스를 수정
  • delete
    • 해당 리소스를 삭제

HTTP 상태코드

200 : 클라이언트의 요청을 정상적으로 수행함

201 : 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적을 ㅗ생성됨(POST 성공)
400 : 클라이언트의 요청이 부적절함
401 : 인증되지 않은 상태에서 보호된 리소스를 요청했을때 사용하는 응답코드
403 : 유저 인증상태와 관계없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을때 응답하는 코드
(403보다는 400,404 응답 권고, 403은 리소스가 존재한다는 의미여서 보안 취약)
405 : 클라이언트가 요청한 리소스에 사용 불가능한 method 이용했을때 응답하는 코드
500 : 서버에 문제가 있을 경우 사용하는 응답코드
301 : 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드

REST API 장단점

장점

  • open API 제공 용이
  • 멀티 플랫폼 지원 및 연동 용이
  • 원하는 타입으로 데이터를 주고 받을 수 있다.
  • 기존 웹 인프라(http)를 그대로 사용할 수 있다.

단점

  • 사용할 수 있는 메서드가 4가지 밖에없다.
  • 분산환경에는 부적합
  • HTTP 통신 모델에만 적용 가능하다.