[네트워크] RESTful, REST API
REST 는 REpresentational State Transfer 의 약자로 로이 필딩의 박사논문에서 최초로 소개되었습니다.
이는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다.
로이 필딩은 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습이 안타까워 웹의 장점을 최대한 활용할 수 있는 아키텍쳐로 REST 를 발표했다고 합니다.
REST 는 크게 3가지 항목으로 구성됩니다.
- 자원 (Resource) - HTTP URI (Uniform Resource Identifier) 를 통해 자원 명시
- 행위 (Verb) - HTTP Method (POST, GET, PUT, DELETE) 사용한 CRUD (Create, Read, Update, Delete)
- 표현 (Representations) - HTTP Message Payload
특징
Uniform (유니폼 인터페이스)
Uniform Interface 는 URI 로 지정한 리소스에 대한 조작을 통일되고 일관적인 인터페이스로 수행하는 아키텍쳐 스타일을 말합니다.
그렇기 때문에 서버가 업데이트를 이루더라도 클라이언트는 업데이트를 할 필요가 없어집니다.
이는 REST 의 특징 중 하나이며 서버가 리소스에 대한 조작을 일관적으로 수행하게 되면 서버와 클라이언트는 독립적으로 업데이트를 할 수 있게 됩니다.
Stateless (무상태성)
REST 는 상태정보 (세션, 쿠키 정보 등) 를 따로 저장하고 관리하지 않습니다. 그렇기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다.
이에 따라 서비스 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해집니다.
Cacheable (캐싱 가능)
REST 는 HTTP 라는 기존 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용할 수 있습니다.
따라서 HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-tag 를 이용하면 캐싱 구현이 가능합니다.
Client - Server 구조
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 Context (세션, 로그인 정보) 등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 됩니다.
계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있습니다.
또한 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 합니다.
REST API 디자인 기본 규칙
REST API 는 다음과 같은 조건을 만족해야 합니다.
URI 를 통한 자원의 식별
- resource 는 동사보다는 명사를, 대문자보다는 소문자를 사용한다.
- resource 도큐먼트 이름으로는 단수 명사를 사용한다.
- resource 컬렉션, 스토어 이름으로는 복수 명사를 사용한다.
자원에 대한 행위는 HTTP Method 로 표현
- URI 에 행위가 포함되서는 안된다.
자기 서술적 메세지
- 요청에 HOST 나 Content-Type 이 빠져있는 경우 자기 서술적 메세지가 아니다.
HATEOAS
HATEOAS 는 Hypermedia As The Engine Of Application State 의 약자로 직역하자면 어플리케이션 상태 엔진으로써의 하이퍼미디어 라는 뜻입니다.
이는 어플리케이션 상태는 항상 하이퍼링크를 이용해 전이되어야 한다는 뜻이며, HTML 과 같이 하이퍼링크가 추가되어 다음에 어떤 API 를 호출해야 하는지 해당 링크를 통하여 받을 수 있어야 함을 의미합니다.
사용자가 어떤 글을 조회한다고 가정할 시, 그 다음 행위로는 댓글달기, 이전/다음 게시물 조회 등의 행위가 가능합니다. 이런 행동을 상태 전이라고 하는데, 링크에는 상태 전이에 대한 정보가 담겨있어야 합니다.
URI 설계 시 주의할 점
- 슬래시 구분자 (/) 는 계층 관계를 나타낼 때 사용한다.
- URI 마지막 문자로 슬래시를 포함하지 않는다.
- 가독성을 높이기 위해 언더바 (_) 대신 하이픈 (-) 을 사용한다.
- 대문자 대신 소문자를 사용한다.
마무리 & 참고 링크
REST API 를 설계하려면 위와 같은 까다로운 조건들을 모두 지켜야 하기 때문에 REST API 를 완벽하게 설계하기란 어려운 일입니다.
그래서 REST 라는 개념을 처음 얘기한 로이 필딩은 최근 REST API 라고 불리는 API 들은 전혀 RESTful 하지 않으며 이들은 그냥 HTTP API 라고 부르는게 더욱 적합하다고 얘기합니다.
저희가 아는 대부분의 API 도 왠만하면 100% RESTful 하지 않을테지만, 앞서 학습한 규칙들을 준수하려고 최대한 노력한다면 어느샌가 RESTful 한 API 에 가까워질수 있지 않을까 생각합니다.
https://junuuu.tistory.com/41?category=974977
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://meetup.toast.com/posts/92
https://www.youtube.com/watch?v=RP_f5dMoHFc
'Studies > Computer Science' 카테고리의 다른 글
[네트워크] 쿠키와 세션 (0) | 2022.07.13 |
---|---|
[네트워크] JSON & XML (0) | 2022.07.05 |
[네트워크] TCP & UDP (0) | 2022.06.06 |
[네트워크] OSI 7계층 (0) | 2022.05.29 |
[운영체제] 프로세스와 스레드 (Process & Thread) (0) | 2022.05.26 |