본문 바로가기
Node.js

Restful-API란 무엇인가? (http, 서버, 구현, 사용방법)

by ™ℬℑ 2022. 5. 31.

Rest란

Rest가 무엇인가를 알아보기에 앞서 Rest의 탄생 과정을 살펴본다면 이해하는데 조금 더 도움이 될 수 있을거라고 생각한다. 로이 필딩(Roy fielding) 이라는 사람이 1994년 10월부터 1995년 8월 사이 HTTP 1.0과 1.1의 개념을 소통하기 위해 Rest를 개발했다. 즉 Rest는 http 1.0과 1.1의 소통을 위해 개발되었기 때문에 웹과는 떨어질래야 떨어질 수 없는 사이다.

본인도 처음 Rest를 이해하기가 쉽지 않아 Rest를이해하려고 많은 자료를 찾아보았다.
많은 자료를 찾아보고 읽어보며 여러가지 동영상도 참고 해보았다. 그 중 본인의 입장에서 제일 이해하기 쉽고 명확하게 설명되어있다고 느낀 동영상(유튜버 우리밋_woorimit 이라는 분의 영상)을 참고로 하여 문서화함과 동시에 블로그에 포스팅 하려고 한다.

Rest란 "사이트 구성 원리"라고 생각하면 이해하기가 쉬울 것이라고 생각한다.

Rest = Representational State Transter

REpresentational (표현)
State (상태)
Transter (전송)

Rest의 약자를 풀어보면 이렇다. 약자를 모두 해석해서 쉽게 표현해보면 "자원의 표현을 가지고 상태전달한다."라고 표현할 수 있다.

Rest : "사이트 구성 원리"

Restful : "Rest한 혹은 Rest스러운"'

Restful-API : "Rest한 혹은 Rest스러운 API"

Restful API

그렇다면 이제부터 Restful API의 구현 방법에 대해서 알아보겠다.
Restful API는 http 인프라를 그대로 사용하기 때문에 별도의 인프라 구축이 필요하지 않다.
Rest는 앞서 설명했던 "자원의 표현을 가지고 상태전달한다." 이 문장을 사용하여 설명하겠다.

자원(Resource) :
모든 URI는 자원으로 나타낸다.

예시1)
GET /sports/soccer/show 
GET /sports/soccer/players/11/delete


(예시 1)의 첫 번째 줄에서는 Sports 안에 soccer를 보여달라고 유추할 수 있다.

(예시 1)의 두 번째 줄에서는 Sports 안에 soccer팀 Players 중에 11번 선수를 삭제해달라고 유추할 수 있다.

하지만 (예시 1)은 Rest를 개발한 로이 필딩의 목적과는 어긋나게 설계한 것이다."모든 URI는 자원으로 나타낸다."
즉 URI는 자원이 들어가야 하지 동사가 들어가면 안 된다. 

 

예시 2)

GET /sports/soccer

 DELETE /sports/soccer/players/11

 

이렇듯 로이 필딩의 목적에 맞게 표기해본 것이 (예시 2)다.
-------------------------------------------------------------------------------------------------


표현(Representational)리소스의 응답 타입은 Header로 나타낸다.

동영상에서 참고하였던 자료를 가지고 예를 들어 보겠다.

(예시 1)의 첫 번째 줄을 보면 우리밋이라는 채널 정보를 모두 응답해 보여줄 것이다. 하지만 (예시1)의 두 번째 줄과 같이 JPG 확장자의 프로필 사진만 바라는 요청이 있을 때도 있다.



예시 1)
GET     /channel/우리밋_woorimIT

"JPG 확장자의 프로필 사진만 응답해주세요"

 

 

이럴 때 Header로 자신이 받고 싶은 응답 타입을 명시해 줄 수 있다. 그 방식이 (예시 2)다.

 

예시 2)

Accept : text/html, image/png

 

Accept : image/jpg 

 

HTTP Method 9가지


상태(State) :
모든 동작은 Method로 나타낸다.

GET
-URI 형식으로 웹 서버측 리소스(데이터)를 요청.
-이때 요청받은 URI의 정보를 검색하여 응답한다.

HEAD : 메세지를 헤더(내부 문서 정보에서) 취득
- GET 방식과 유사
- 응답에 body가 없고 응답 코드와 HEAD만 응답한다.
- 웹서버 정보확인, 버전 확인, 최종 수정일 등 조회시 사용 한다.

POST : 내용 전송 (파일 전송 가능)
- 요청된 자원을 생성(Create)한다.

PUT : 내용 갱신 위주 (파일 전송 가능)
- 요청된 자원을 수정(Update)한다.
- 모든 데이터를 수정할 때 사용한다.

PATCH
- PUT과 유사함
- 자원의 일부를 교체하기 위해 사용한다. ( 이점이 PUT과 다름)

DELETE : 자원 삭제
- 요청된 자원을 삭제(Delete)한다.

CONNECT
- 요청된 자원에 대해 양방향 연결을 시작한다는 의미
- 주로 웹 서버에 프록시 기능을 요청할 때 사용한다.

OPTION
- 목표 리소스와의 통신 옵션을 설명하기 위해 사용된다.
- 시스템에서 지원되는 메소드 종류를 확인할 수 있다.

TRACE
- Client로부터 Request Packet이 변조가 일어날 수 있는데, 이때 Server에 도달한 최종 Packet의 Request Packet을 볼 수 있다.
- 요청을 보낸 곳에 어떤 요청이 가공되어 있는지 등을 조사할 수 있다.

글을 마치며

"자원의 표현을 가지고 상태전달한다."

자원 (Resource) : URI
/feed/subscriptions

표현(Representational) : Header
text/html, image/gif, text/*

상태 (State) : Method
GET, POST, PUT, DELETE 등등

'Node.js' 카테고리의 다른 글

Node.js란 무엇인가  (0) 2022.06.01

댓글