REST API에 대해서 알아보자.

NSH·2020년 5월 18일
0
post-thumbnail

자주 사용하지만, 확실하게 설명하지 못했던 'REST API' 에 대해서 공부한 것을 기록하고자 한다.

1. REST 란?

HTTP URI를 통해서 자원(Resource)를 명시하고 HTTP METHOD(GET, POST, PUT, DELETE)를 통해 해당 자원(Resource)에 CRUD Operation을 적용하여 처리하도록 설계된 아키택쳐 이다.

2. REST API 란 ?

REST 아키텍쳐를 기반으로 서비스 API를 구현한 것이 REST API 이다.

3. REST API 특징

1) Client -Server 구조

REST API Server는 API를 제공하고, Client는 사용자 인증 및 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조이다. 역할이 확실하게 구분되어 의존성이 줄어들고 개발내용이 명확해진다.

2) Stateless (무 상태)

REST는 상태정보를 저장하지 않는다. 세션 및 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 REST API Server는 들어오는 요청만 처리한다. 따라서, 구현이 단순해지고 불필요한 정보를 저장하지 않아도 된다.

3) Cacheable (캐싱 기능)

REST는 HTTP의 웹 표준을 사용하기 때문에 HTTP의 캐싱 기능을 그대로 사용할 수 있습니다. Last-Modified, E-Tag를 사용하면 캐싱 기능 구현이 가능하다. 잘 관리되는 캐싱은 Client-Server간 상호작용을 부분적으로 또는 완전하게 제거하여 성능을 향상시킨다.

4) Layered System (계층화)

REST API Server는 다중 계층으로 존재할 수 있으며, 로드밴런싱, 암호화 등을 추가하여 구조가 유연하고 PROXY, 게이트웨이와 같은 네트워크 기반의 중간매체를 사용할 수 있다

5) Uniform Interface(인터페이스 일관성)

아키텍처를 단순화시키고 작은 단위로 분리함으로써 Client -Server 각 파트가 독립적으로 개선될 수 있다.

  • Self-descriptive
    REST는 Stateless의 특징을 가지고 있으므로, Client-Server 간 Message를 통해서 자신에 대한 정보를 충분히 설명할 필요가 있다. 따라서 Response를 이해할 수 있도록 정보들을 Link header, HTTP method, HTTP status code, HTTP header 등을 통해서 전달되어야 한다.

ex) Self-descriptive
GET /todos HTTP/1.1
Host: temp.com
HTTP/1.1 200 OK
Content-Type: application/json
Link: https://temp.org/docs/profile; rel:"profile"

  • HASTOEAS(Hypermedia As The Engine Of Application State
    HTTP Response에 다음 Action이나 관계되는 리소스에 대한 HTTP Link를 함께 제공한다. 단순한 예로는 페이징을 처리할때 이전, 이후 페이지에 대한 링크를 제공한다.

6) Code-On-Demand(optional)

Server로 부터 스크립트를 받아서 Client가 실행하며, 반드시 충족할 필요는 없다.

4. HTTP METHOD

METHOD내용
GETGET을 통해 해당 리소스를 조회한다.
PUTPUT을 통해 해당 리소스를 수정한다.
POSTPOST를 통해 해당 리소스를 생성한다.
DELETEDELETE를 통해 해당 리소스를 삭제한다.

5. REST API 가이드

1) URI는 정보의 자원을 표현한다.
자원은 명사를 사용하며, 행위에 대한 표현이 들어가면 안된다.
행위에 대한 표현은 HTTP METHOD(GET, POST, DELETE, PUT)을 사용한다.

GET /posts/1 조회
POST /post 생성
DELETE /posts/1 삭제
PUT /posts/1 수정

2) '-'(dash)를 사용해서 가독성을 높인다.

Bad
http://temp.com/post/post_reply
http://temp.com/post/postReply
Good
http://temp.com/post/post-reply

3) '/'는 계층 관계를 나타낸다.

Bad
http://temp.com/desks/users
http://temp.com/books/users
Good
http://temp.com/users/desks
http://temp.com/users/books

4) URI의 마지막에 /를 사용하면 안된다.

Bad
http://temp.com/users/desks/
Good
http://temp.com/users/desks/

5) URI 경로는 소문자를 사용한다.

대문자로 경로를 작성하면 소문자와 다른 자원으로 인식하기 떄문이다.

Bad
http://temp.com/post/postReply
Good
http://temp.com/post/post-reply

6) 파일 확장자를 URI에 포함시키지 않는다.

파일 확장자는 Accept header(서버에 어떤 타입의 데이터를 보내줫으면 좋겠는지를 명시할 때 사용)를 사용해서 요청한다.

Accept: text/html // html 형식의
Accept: image/png, image/gif
Accept: text/*

Bad
http://temp.com/users/4/photo/temp.jpg
Good
http://temp.com/users/4/photo Accept: image/png

profile
잘 하고 싶다.

0개의 댓글