[CS-WEB] REST API

지영·2023년 8월 7일
0

CS

목록 보기
55/77

REST

REpresentational State Transfer

REST와 API를 따로 구분해서 생각하면 좋다. REST는 하나의 아키텍쳐(방법론)에 가깝기 때문이다. 그렇기 때문에 몇 가지 주요 원칙들이 존재하며, 이를 잘 지킨 API를 "RESTful"하다고 표현한다. (*API : Application Programming Interface의 약자로, 서버가 클라이언트에게 제공하는 리소스 활용 방법이 담긴 인터페이스)

✔ 정의

  • 자원을 이름으로 구분하여 해당 자원의 상태 정보를 주고 받는 모든 것을 의미
  • 즉, CRUD연산 수행을 위해 요청을 보내는 것
  • 웹의 기존 기술과 HTTP프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍쳐 스타일임.

✔ 등장배경

외부에서 서버의 자원을 적절히 불러올 수 있도록 활용 방법을 구선한 것이 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요청이 직관적이다.

1. 자원(Resource) : URI

  • 서버 내에 존재하는 자원들은 모두 고유의 ID를 가짐
  • 해당 자원을 구별하는 ID가 바로 HTTP URI
  • 클라이언트를 URI를 이용해서 자원을 지정하고 해당 자원의 상태에 대한 조작을 SERVER에 요청!

2. 행위(Verb)

  • GET / POST / PUT / DELETE등의 HTTP 요청 메서드를 의미함

3. 표현 (Representation of Resource)

  • 행위의 구체적인 내용

✔ 주요원칙

REST는 몇가지의 조건을 만족해야 하는데, 조건을 만족하지 못하면 단순히 HTTP API라고 부르기도 한다. (그래서 우리가 보는 대부분은 REST API라기 보다는 HTTP API해당되는 것이 더 많다🧐)

  • URL은 리소스를 표현해야 한다.
    : 달리 말해서 "URL은 행위를 표현하면 안된다"와 비슷하다. 행위를 통해 조작되는 자원을 중점으로 단어를 표기해야 한다. 어떤 자원이 전달되는지 명확하게 나타내고 행위는 직접적으로 노출되지 않도록 주의한다.

부적절한 예시) 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

profile
꾸준함의 힘을 아는 개발자가 목표입니다 📍

0개의 댓글