e6cf612f71a97e9e443a351aef4cc935.jpg

RESTful API [Representational State Transfer]

이해하기 쉽고 사용하기 쉬운 서비스 API를 제공하기 위해 REST원리에 따라 구현한 것.
REST API를 제공하는 웹서비스를 'RESTful 하다'고 할 수 있다.

근데 그 전에...

  • API????

    Application Programing Interface 의 약자로, 어떤 프로그램에서 사용할 수 있게 프로그래밍 언어나 데이터를 주고 받기 위한 방법/규격 (interface).
    (흔히 업체쪽에서 API를 제공하지 않는다는 건 보내는 측에서 정보를 제공하지 않는다는 의미.)

  • REST????

    Representatioal State Transfer의 약자.
    자원(resource)을 그 자원의 이름(자원의 표현)으로 구분해서 그 자원의 상태를 주고 받는 모든 것을 뜻함.
    자원을 명시하여 HTTP Method를 통해 그 자원을 처리하도록 설계된 것.
    cf.>문서나 그림이나 데이터 등이 자원. 그리고 만약 학생 정보가 자원이면 'student'를 자원의 표현(이름)으로 정함

  • 특징
    Server-Client(서버-클라이언트 구조) ;자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client.
    HTTP프로토콜이 stateless여서 REST도 무상태성.
    상태정보를 따로 저장하거나 관리하지 않고 api서버는 단순히 들어오는 요청만을 처리한다는 등 많지만 제일 중요한 특징은..
    "self-descriptiveness"!
    RESTful API는 그 자체만으로도 API의 목적이 쉽게 이해됨

    <example> 
    HTTP GET https://api.trueshort.com/stock/005930 ` 
    //문서나 주석이 없이 상위 "https://api.trueshort.com 라는 API에서 삼성전자 주식에 관한 정보를 HTTP 요청을 통해 받아오는 구나" 라는 해석이 가능
  • 네이밍 패턴
    -URI는 정보의 자원을 표현해야 함
    자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현
    -/(슬래시)는 계층 관계를 나타냄

    <example 1>
    https://api.trueshort.com/kospi/stock/005930 
    //KOSPI에 속해있는 주식(Stock) 중 삼성전자(005930)을 나타냄
    <example 2>
    https://api.shopping.com/books/novel/stephenking 
    // 책들중 소설 그리고 소설중 Stephen King의 소설을 나타내는 구조
    주소에는 명사(해당 주체) , 동사는 메서드로. 그 자체만으로 목적이 보이게. 

    -가독성을 위해 URI에 _(underscore)는 주로 포함 x,
    영어 대문자보다는 소문자 사용 & URI는 명사 사용

    <example 3>
    /books/novel/stephenking 이라고 하지 /books/novel/get-stephenking 이라고 안씀
    -> 동사는 GET, POST 같은 HTTP Method를 통해 표현하기 때문.