REST와 API를 따로 구분해서 생각하면 좋다. REST는 하나의 아키텍쳐(방법론)에 가깝기 때문이다. 그렇기 때문에 몇 가지 주요 원칙들이 존재하며, 이를 잘 지킨 API를 "RESTful"하다고 표현한다. (*API : Application Programming Interface의 약자로, 서버가 클라이언트에게 제공하는 리소스 활용 방법이 담긴 인터페이스)
외부에서 서버의 자원을 적절히 불러올 수 있도록 활용 방법을 구선한 것이 API이다. 웹 API가 점차 확산되면서 이를 표준화하기 위한 프로토콜 SOAP(Simple Object Access Protocol) 이 개발 되었다. SOAP API는 XML을 사용하며 HTTP, SMTP, TCP등의 요청을 주고받았으며, 간편한 방법으로 애플리케이션을 다양한 환경에서 실행할 수 있다.
POST http://www.stgregorioschurchdc.org/cgi/websvccal.cgi HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://www.stgregorioschurchdc.org/Calendar#easter_date"
Content-Length: 479
Host: www.stgregorioschurchdc.org
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
<?xml version="1.0"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cal="http://www.stgregorioschurchdc.org/Calendar">
<soapenv:Header/>
<soapenv:Body>
<cal:easter_date soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<year xsi:type="xsd:short">2014</year>
</cal:easter_date>
</soapenv:Body>
</soapenv:Envelope>
위의 코드가 SOAP API로 보낸 요청의 예시이다. XML로 요청을 주고 받을 경우 저 정도의 payload가 생긴다. 양이 굉장히 크기 때문에 네트워크 대역폭을 많이 차지하는 문제가 생겨서, 인터넷 통신이 기하급수적으로 늘어난 21세기 통신에는 부적합했다.
이러한 문제를 해결하기 위하여 21세기에 등장한 것이 REST 아키텍쳐 API인 것이다.
(자원 + 행위 + 표현)로 구성되어 자체 표현 구조라 HTTP요청이 직관적이다.
REST는 몇가지의 조건을 만족해야 하는데, 조건을 만족하지 못하면 단순히 HTTP API라고 부르기도 한다. (그래서 우리가 보는 대부분은 REST API라기 보다는 HTTP API해당되는 것이 더 많다🧐)
부적절한 예시) naver.com/delete/post/1
리소스에 대한 행위는 HTTP 요청 메소드로 표현한다.
: HTTP메소드 또한 자운에 대해 수행할 수 있는 행위의 종류이므로, URL에 직접 노출되어서는 안된다.
적절한 예시) DELETE naver.com/post/1
요청과 응답 payload는 JSON으로 주고받는다.
Resource 지향 아키텍쳐 (ROA. Resource Oriented Architecture)
: Resource 기반의 복수형 명사 형태의 정의를 권장
이외에도 여러 가지가 있다.!
*참고 : https://haeunyah.tistory.com/45, https://gyoogle.dev/blog/web-knowledge/REST%20API.html