반응형

REST API는

웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 개발하게 됐다.



REST API 구성

  • 자원(Resource) - URI

  • 행위(Verb) - HTTP METHOD

  • 표현(Representations)



REST API 특징

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

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


  • Stateless (무상태성)

작업을 위한 상태정보를 따로 저장하거나 관리하지 않는 특징을 가진다.

즉, 세션 및 쿠키같은 정보를 저장하지 않기 때문에 API 서버는 들어오는 요청을 처리만 하면 된다. 따라서 서비스의 자유도가 높아지고 서버가 불필요한 내용들을 관리하지 않음으로써 비용이 줄어든다.


  • Cacheable (캐싱)

HTTP라는 기존 웹표준을 그대로 사용하기에, 웹에서 사용하는 기존 인프라를 사용 할 수 있고 결국 HTTP가 가진 캐싱 기능을 사용 할 수 있다.


  • Self-descriptiveness (자체 표현 구조)

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


  • Server / Client 구조

REST 서버는 API를 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보) 등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 서버/클라이언트간 개발해야 할 내용이 명확하며 서로간의 의존성이 줄어들게 된다.


  • 계층형 구조

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



REST API 디자인 방법


* 알고가기 *

HTTP METHOD의 역할

POST, GET, PUT, DELETE 이 4가지의 Method를 가지고 CRUD를 할 수 있다.


Method

역할

POST

POST를 통해 해당 URI를 요청하면 리소스를 생성한다.

GET

GET을 통해 해당 리소스를 조회한다.

즉, 리소스를 조회하고 해당 document에 대한 자세한 정보를 가져온다.

PUT

PUT을 통해 해당 리소스를 수정한다.

DELETE

DELETE를 통해 해당 리소스를 삭제한다.


URI는 자원을 표현하는 데에 집중하고 행위에 대한 정의는 HTTP METHOD를 통해 하는 것이 REST한 API를 설계하는 중심 규칙이다.



REST API 설계를 할 때 아래 2가지를 항상 명심하고 설계하자.

  1. URI는 정보의 자원을 표현해야 한다.

  2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.


즉, GET Method를 이용하는데

GET /members/delete/1 은 올바르지 않다는 것이다.

URI는 자원을 표현하는데 중점을 두어야 하기 때문에 delete와 같은 표현이 들어가서는 안된다.


위와 같이 잘못된 URI는 DELETE /members/1 로 표현 할 수 있다.


회원정보를 가져오는 URI

GET /members/show/1     (x)

GET /members/1          (o)


회원을 추가할 때

GET /members/insert/2 (x)  - GET 메서드는 리소스 생성에 맞지 않다.

POST /members/2       (o)



URI 설계 시 주의할 점


1. 슬래시 구분자(/)는 계층 관계를 나타낼 때 사용한다.

이때 /는 마지막 URI에 포함하지 않는다.

http://restapi.example.com/houses/apartments/ (X)

http://restapi.example.com/houses/apartments  (O)


2. 하이픈(-)은 URI 가독성을 높이는데 사용한다.

이때 밑줄(_)은 여러 폰트에 따라 안보일 수 있으므로 사용하지 않는다.


3. URI경로는 소문자가 적합하며 대문자는 피하는게 좋다.


4. 파일 확장자는 URI에 포함시키지 않는 것이 좋다.

http://restapi.example.com/members/soccer/345/photo.jpg (X)


이때 확장자를 표기하지 않고 Accept header을 이용하면 된다.


GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)










반응형