# REST(Representational State Tansfer) API

REST(Representational State Tansfer) API란 어떤 기술이나 제품이 아닌 방식, 형식을 말한다. API를 요청할 때 요청하는 모습 자체로 어떤 정보인지 추론 가능한 형태임을 말한다. 사전적 정의는 웹상에서 사용되는 여러 리소스를 HTTP URI로 표현하고 그 리소스에 대한 행위를 HTTP Method로 정의하는 방식, 즉 리소스(HTTP URI로 정의된)를 어떻게 한다(HTTP Method+Payload)를 구조적으로 깔끔하게 표현하는 것을 말한다.

# API란?

API(Application Programming Interface)란 단어 자체의 뜻 처럼 어플리케이션 프로그래밍 인터페이스를 말한다. 인터페이스란 쉽게 말해 자판기의 버튼과 같은 역할을 하며 소프트웨어와 소프트웨어 간의 정보교환 창구이다. 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 말한다. 예를 들어 기상청서버로부터 미리 작성된 소프트웨어(지정된 형식, 공개된 메뉴얼)를 통해 날씨 정보를 요청하고 전송 받을 수가 있다.

네트워크 상에서만이 아닌 로컬프로그램인 브라우저는 Web API를 통해 자바스크립트로부터

특정 동작을 지시받기도 한다. (ex 어떤 함수로 어떤 동작을 수행한다)

# SOAP vs REST

REST와 SOAP는 각기 다른 두 가지의 온라인 데이터 전송 방식이다. 둘 다 웹 애플리케이션 간 데이터 통신을 허용하는 애플리케이션 프로그래밍 인터페이스(Application Programming Interface, API)를 구축하는 방법을 정의한다. REST(Representational State Transfer)는 아키텍처 원칙 세트이고, SOAP(Simple Object Access Protocol)는 World Wide Web Consortium(W3C)에서 유지관리하는 공식 프로토콜이다. 즉, SOAP는 프로토콜이지만, REST는 프로토콜이 아니라는 점이 주요 차이점이다.

// SOAP example
<soapenv:Enelope xmlns:soapenv="<http://schemas.xmlsoap.org/soap/envelope/>" xmlns:sch="<http://www.soapexample.com/xml/users>">
  <soapenv:Header/>
  <soapenv:Body>
     <sch:UserDetailsRequest>
        <sch:name>John</sch:name>
     </sch:UserDetailsRequest>
  </soapenv:Body>
</soapenv:Envelope>

// REST example
{
 "name": "John",
 "age": 5,
 "address": "Greenville"
}

REST API의 장점은 self-descriptiveness, RESTful API는 그 자체만으로도 API의 목적이 쉽게 이해된다. 또한 단점으로는 표준 규약이 없어, 안티패턴(실제 많이 사용되는 패턴이지만 비효율적이나 비생산적인 패턴)으로 작성되는 경우가 흔하다.

SOAP vs REST의 차이

https://www.upwork.com/resources/soap-vs-rest-a-look-at-two-different-api-styles

# RESTful API 설계 규칙

(1) URI 정보를 명확하게 표현해야 한다.

resource는 명사를 사용한다.

(2) resource에 대한 행위를 HTTP Method로 표현한다.

URI에 HTTP Method가 포함되서는 안된다.

URI에 동사가 포함되서는 안된다.