API와 HTTP의 관계

2021. 8. 9. 00:59Mobile App

API를 개발하기 전에 ! API가 무엇인지 알아보자!!

 

API란

API를 설명하기 위해 주로 식당이 사용된다.

여기서 API는 점원과 같은 역할이다.

1. 손님이 점원에게 음식을 요청한다.

2. 점원이 요리사에게 음식을 요청한다.

3. 요리사가 점원에게 음식을 전달한다.

4. 점원이 손님에게 음식을 전달한다.

요리사와 손님을 연결하는 것이 점원(API)의 역할이다. 

여기서 요리사와 손님은 프로그램이고, 음식은 데이터이다. 

 

즉, API는 프로그램 간의 연결 다리이다.

 

API의 역할

1. API는 서버와 데이터베이스에 대한 출입구 역할을 한다.

허용된 사람들에게만 접근성을 부여한다.

2. API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.

데이터를 원활히 주고받을 수 있도록 돕는다.

3. API는 모든 접속을 표준화한다.

API는 모든 접속을 표준화하기 때문에 기계/ 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있습니다. 쉽게 말해, API는 범용 플러그처럼 작동한다고 볼 수 있다.

 

HTTP란

웹 상에서 서로 다른 서버간에 HTML(하이퍼텍스트 문서)를 주고 받을 수 있도록 만들어진 프로토콜이다.

프로토콜: 어떤 형태로 통신하자고 정해 놓은 규칙이다. 예를 들어, 두 사람이 한국어, 일본어로 대화한다면 커뮤니케이션을 할 수 없을 것이다. 따라서 둘 다 이해할 수 있는 공용어로 소통하자고 정해놓는 것이다.

HTTP요청구조

1. START LINE

"search" 엔드포인트에 GET HTTP 요청을 보낸다면! 시작줄은 이렇게 된다!!

GET /search HTTP/1.1

- HTTP메소드

  : HTTP 요청이 의도하는 액션을 정의하는 부분

  : GET(데이터를 받는 액션), POST(새로운 데이터 저장 액션), PUT, DELETE, OPTIONS 등

- Request target

  : HTTP 요청이 전송되는 목표 주소

- HTTP version

  : HTTP 버전에 따라 HTTP 요청 메시지의 구조나 데이터가 약간씩 다르니 조심!

 

이렇게 세부분으로 구성된다. 

 

2. 헤더

HTTP 요청 그 자체에 대한 정보를 담고있다. python 의 dictionary처럼 key와 value로 되어있다. 

chyun.com에 보내는 HTTP 요청의 HOST헤더라면!

HOST : google.com

key: value형태이다.

자주 사용되는 HTTP헤더 종류

 

- Host: 요청이 전송되는 target의 호스트의 URL 주소를 알려주는 헤더

- User-Agent: 요청을 보내는 클라이언트에 대한 정보, 예를들어 웹 브라우저에 대한 정보

- Accept: 헤더 요청이 받을 수 있는 응답 body 데이터 타입을 알려주는 헤더

- Connection: 해당 요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 연결을 유지할 것인지/끊을 것인지에 대해 알려주는 헤더

-Content-Type: HTTP 요청이 보내는 메시지 body의 타입을 알려주는 헤더

-Content-Length: HTTP 요청이 보내는 메시지 body의 총 사이즈를 알려주는 헤더

 

3.Body

HTTP 요청이 전송하는 데이터를 담고 있는 부분이다. 전송하는 데이터가 없다면 body는 비어있게 된다.

 

 

HTTP 응답구조

1. Status Line

HTTP/1.1 404 Not Found

- HTTP Version

- Status Code: HTTP 응답 상태를 미리 지정되어 있는 숫자로 된 코드로 나타내 준다. 

- Status Text: 응답 상태를 간략하게 글로 설명해준다.

 

2. 헤더

요청의 헤더 부분과 동일하다. 다만, User-Agent헤더 대신 Server헤더가 사용된다. 

3. Body

요청의 바디와 동일하다.

 

이제! http를 사용하기 위해, 터미널 명령어 환경에서 HTTP 요청을 보낼 수 있게 해주는 httpie라는 툴을 설치해보자!

윈도우에서는 pip install -U httpie 명령어로 설치할 수 있다.

 

자!! 그럼 http 명령을 보내보자 !

*핑 엔드포인트가 없다면 아래 코드를 app으로 지정한 파일에 넣자!

from flask import Flask

app = Flask(__name__)

@app.route("/ping", methods=['GET'])
def ping():
    return "pong"

1. cmd창 하나는 가상환경을 실행해 flask run 하기

=> flask 로 개발한 api가 실행 됨

2. cmd창을 하나 더 열어서 가상환경에 진입해서(activate) http -v GET localhost:5000/ping 명령어 입력하기

 

api 실행한 창

 

http 요청을 보낸 창

pong이라는 응답이 도착했다 !!!!!!!!!!!!!!!!!!! 

첫 http 요청 성공 !🤍💨

 

API는 기본적으로 HTTP 통신에 기반을 두고 있기 때문에 중요하다 !!

 

즉, API와 HTTP의 관계는 API가 점원이라면 HTTP는 음식 정보를 담아서 전달되는 주문서이다.

왜냐! HTTP는 주문서처럼 정해진 형식, 규칙, 구조가 있기 때문이다. 

 

 

'Mobile App' 카테고리의 다른 글

react-native 개발 환경 설정  (0) 2021.09.23
인증  (0) 2021.08.24
2-3.모델로 데이터 처리하기  (0) 2021.08.06
2-2.블루프린트로 라우트 함수 관리하기  (0) 2021.08.05
2-1.플라스크 애플리케이션 팩토리  (0) 2021.08.04