ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • python flask로 간편하게 REST API 서버 만들기 - (1) REST API란?
    IT/파이썬 응용 프로그래밍 2021. 9. 2. 23:49
    728x90
    SMALL

    1. REST API란?

    API는 Application Programming Interface의 약자로, 클라이언트로 부터 요청을 받으면 응답을 만든다. 예를 들어 로그인을 한다고 가정하면, 웹 브라우저에서 사용자로부터 이메일 정보 혹은 id와 패스워드를 받아서 요청을 보내면 API는 이를 받고 알맞은 응답(로그인 성공 여부와 로그인을 실패했다면 왜 실패했는지 메시지 등등)을 만들어서 보내준다. REST는 API의 한 종류이다. HTML처럼 정해진 표준이 아니고 한 방식이라는 것이다. 그렇다면 REST는 어떤 방식일까? 우선 REST API는 다음과 같이 구성되어있다.

    • URI - 요청을 전달받고, 응답을 전달할 자원 (주소)
    • METHOD (HTTP) - HTTP Method를 통해 어떤 작업이 이루어질 것인지 명시
    • REPRESENTATIONS - 자원이 어떤 것으로 이루어져있는지 표현 (이미지, 텍스트 등등)

    우리가 흔히, 웹사이트를 사용하면 주소창에서 볼 수 있는 주소를 URI라고 할 수 있다. 네이버에서 "이홍기"를 검색하면, "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=이홍기" 와 같은 주소가 주소창에 쓰여있을 것이다. 여기서 https://search.naver.com/search.naver는 무엇인가 검색할 때 요청을 보낼 URI이다. 이 URI에 parameter값으로 query = "이홍기"를 붙여서 보내주면 이홍기에 대한 API 검색결과가 응답으로 와서 우리가 보는 포털 사이트를 꾸밀 수 있다.

    네이버에서 보이는 이홍기 검색결과 일부 발췌

    위에서 봤던 것처럼 요청을 보내게 되면, HTTP Method를 동시에 지정해서 보내주어야 한다. HTTP Method는 크게 4종류가 있다. (이거말고도 여러개가 있지만 가장 많이 쓰이고 보편적으로 알려진 4개를 소개한다.)

    • GET - 어떤 데이터를 얻어오고 싶은 경우
    • POST - 요청 시에 실어보낼 데이터가 있는 경우
    • PUT - 특정 데이터를 수정하는 요청을 보내고 싶은 경우
    • DELETE - 특정 데이터를 삭제하고 싶은 경우

    크게 네가지 목적으로 사용하게 되는데, 이는 우리가 데이터베이스에서 배운 CRUD 연산과 비슷하다. CREATE - POST, READ - GET, UPDATE - PUT, DELETE - DELETE 로 매칭해서 생각하면 된다. 어떤 작업을 할건지에 따라서 이 메소드를 지정해서 API를 짤 때, 해당 메소드로 요청을 받을 수 있도록 짜면 된다. 위에서 본 예제로 보면, "이홍기"를 검색하는 행위는 가수 "이홍기"에 대한 정보를 웹 상에 띄워주고 싶다는 행위가 된다. 따라서 GET 메소드로 설계되었을 확률이 높다. GET은 URI에 ?로 붙는 파라미터로 데이터를 전달 받으므로 query라는 이름의 파라미터에 "이홍기"라는 값을 집어넣어서 API가 이를 받아서 "이홍기"에 대한 검색결과를 전달해줬을 것이다. 

     

    위 그림처럼 클라이언트 (웹 브라우저)에서 네이버 API 서버로 GET (method) + URI (https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=이홍기)로 요청을하면 API 서버에서는 그에 맞는 결과 데이터를 전송해주고 전송한 후에는 위에서 봤던 것처럼 검색 결과가 나오게 되는 것이다.

    따라서, REST API를 설계할 때는 어떤 목적으로 API를 사용하는지에 따라 Method를 잘 정해야 한다. 개념적인 부분은 여기서 설명을 마친다. 다음 장에서 예제 코드를 통해 본격적으로 알아보자

    728x90
    LIST

    댓글

Designed by Tistory.