먼저 결론적으로 말씀드리면 REST API란 위의 내용과 같습니다. 본문에서 위의 내용을 하나, 하나 나누어서 설명을 드리도록 하겠습니다.
HTTP란 웹 브라우저(Web Browser)와 웹 서버(Web Server)가 통신을 할 때 사용하는 통신규약입니다.
과거에는 HTTP가 하이퍼텍스트(hyper text)만 주고받았지만, 오늘날에는 우리가 인터넷에서 얻을 수 있는 모든 이미지, 영상 등 다양한 멀티미디어를 전송하는 중요한 프로토콜로 사용되고 있습니다.
웹에서 HTML, CSS, JS, 이미지와 같은 파일들이 서로 주고받는 콘텐츠입니다. 이러한 콘텐츠를 주고받기 위해 서버와 클라이언트가 알아들을 수 있는 공통의 약속인 메세지가 필요한데, 이 메세지를 HTTP라고 하며 크게 응답을 요청하는 Request와 요청에 대해 응답하는 Response 두 가지의 메세지가 존재합니다.
URI(Uniform Resource Identifier)란 자원이 실제로 존재하는 위치와 그 자원을 식별할 수 있는 고유 식별자입니다.
그렇다면 위에서 말하는 자원이란 무엇일까요? 컴퓨터 언어에서는 리소스(resource)라고도 하는데요. 리소스란 주고 받는 데이터를 의미합니다.
리소스에는 데이터 한 건 한 건을 의미하는 엘리먼트(Element)와 데이터 집합, 즉 엘리먼트의 집합을 의미하는 콜렉션(Collection)의 개념을 가집니다.
우리가 책을 소개하는 서비스를 웹에서 제공하고 있다고 가정한다면, 제공하는 리소스에서 데이터의 집합 즉,여기선 books를 콜랙션, 그리고 책 하나 하나를 엘리먼트라고 합니다.
*REST API를 공부하시다보면 URI와 URL이라는 단어를 같이 사용하시는 것을 볼 수 있는데요.
URL는 Uniform Resource Location의 약자로 리소스가 실제로 위치하는 곳을 의미합니다. 하지만 위에서 URI를 설명했듯이, URI는 리소스가 실제로 존재하는 위치와 그 자원을 식별할 수 있는 고유 식별자이기도 함으로 URI 안에 URL의 개념이 내포한 것으로 보시면 됩니다.
REST API에서의 메소드(Method)란 자원을 식별하는 리소스를 가공할 수 있는 방법을 의미합니다.
위에서 리소스처럼 정보에 대해 식별할 수 있었지만, 그러한 정보들을 가공할 수 없다면 제대로 활용할 수 없습니다. 예를 들어 이러한 정보들을 생성하고, 조회하고, 수정하고, 삭제할 수 있는 기능을 갖춘다면 우리는 이러한 정보들을 더욱 잘 활용할 수 있습니다.
생성,조회,수정,삭제 위 4가지의 기능을 HTTP에서 사용하는 메소드로는 크게 다음 5가지로 정리할 수 있습니다.
HTTP method에서 수정에는 PUT과 PATCH 두 방법이 있는데, PUT은 전체 수정을 할 때 사용하며, PATCH는 부분만 수정할 때 사용합니다. PATCH는 기존의 정보에서 언급한 부분만 정보가 갱신되고 다른 정보에 영향을 주진 않지만, PUT은 기존의 정보에서 언급하지 않은 곳은 삭제가 되버리기 때문에 두 메소드가 어떻게 다른지 잘 이해하고 사용해야 됩니다.
REST API는 데이터의 리소스는 URI를 통해 식별하고, HTTP의 규정대로 HTTP method를 통해 데이터를 가공하는 개발자들의 약속입니다.
REST는 Representational state transfer의 약자로, 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식입니다. 쉽게 말하면, 과거의 SOAP라는 복잡한 형식에서 API에서 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능하게 설계된 형식입니다.
서비스를 개발자 혼자서 만든다고 하면 기능 자체에 문제없이 개발자가 혼자만 이해할 수 있는 내용으로 만드면 문제가 없겠지만, 나중에 이 일을 인계받는 다른 개발자가 있다면, 그 개발자는 굉장히 일하기 어려워질 것입니다. 따라서 HTTP 요청을 보낼 때 어떤 URI에 어떤 메소드를 사용할지 개발자들이 이해하기 쉽게 만든 형식입니다.
REST API는 두 시스템과 통신하기 위한 프로토콜이 아닙니다. OSI 계층으로 구분했을 때, HTTP 계층 상단에 존재하는 응용 계층(application layer)에 포함됩니다. 따라서 통신 상태를 확인할 때 HTTP 통신 상태에서 문제가 발생한 것인지 REST API에서 통신 상태 문제가 발생한 것인지 구분할 줄 알아야 합니다.
생활코딩, "기계들의 대화법 - REST API"
https://www.youtube.com/watch?v=PmY3dWcCxXI
김동현, "URL과 URI의 차이점"
https://velog.io/@torang/URL%EA%B3%BC-URI%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
covenant, "REST란? REST API 디자인 가이드"
https://covenant.tistory.com/241