API 이해하기

mrban 2022. 1. 16. 22:31

1. API란?

API는 한마디로 프로그램들이 서로 상호작용할 수 있는 창구이다. 서버와 db의 출입구 역할을 하는 통로라고 생각하면 된다.

 

2. 어떤식으로 API를 통해 서버와 클라이언트의 소통이 이뤄지는지 예를 통해 살펴보자.

@app.route('/api/login', methods=['POST'])
def create_token():
    # 로그인 할때 input창에 입력한 id, pw를 가져와서 db에서 확인.
    id_receive = request.form['id_give']
    pw_receive = request.form['pw_give']
    result = db.banksalada.find_one({'id1': id_receive})

    # 만약에 db에 실제로 id와 pw가 맞다면 if문 실행.(해싱된 pw와 입력한 pw가 일치하는지 확인).
    if result and bcrypt.checkpw(pw_receive.encode('utf-8'), result['pw']):
        # exp는 만료시간 여기서는 5분으로 설정. jwt를 만들어서 encoded라는 변수에 넣는다.
        encoded = jwt.encode({'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=300)
                                 , 'id': id_receive}, SECRET_KEY, algorithm='HS256')
        # encoded라는 변수를 다시 json 형식으로 클라이언트에게 보내준다.
        return jsonify({'result': True, 'token': encoded})
    else:
        # 만약 db에 실제로 id와 pw가 없거나 이상하다면 jwt를 만들지도 않고 그냥 메시지만 json으로 보낸다.
        return jsonify({'result': False, 'msg': '아이디/비밀번호가 일치하지 않습니다.'})

위의 코드는 클라이언트가 로그인창에서 로그인 버튼을 눌러 POST요청을 보낼 때 서버에서 하는 작업들이다. 

return jsonify({'result': True, 'token': encoded})
else:
    # 만약 db에 실제로 id와 pw가 없거나 이상하다면 jwt를 만들지도 않고 그냥 메시지만 json으로 보낸다.
    return jsonify({'result': False, 'msg': '아이디/비밀번호가 일치하지 않습니다.'})

일련의 작업들 뒤에 클라이언트에게 다시 json형식의 데이터들을 return하는 것을 확인할 수 있다.

 

아래는 클라이언트가 ajax를 통해 '/api/login' 주소로 POST 요청하는 것이다.

$.ajax({
    type: 'POST',
    url: '/api/login',
    data: {id_give: id_check, pw_give: pw_check},
    success: function (response) {
        if (response['result'] == true) {
            //jquery를 활용한 쿠키에 토큰을 저장한다. 이 쿠키의 이름은 mytoken이다.
            //https://doqtqu.tistory.com/277 토큰 저장 장소로 쿠키의 장단점.
            $.cookie('mytoken', response['token']);
            window.location.href = '/';
        } else {
            alert(response['msg']);
            window.location.reload();
        }
    },
});

 

data: {id_give: id_check, pw_give: pw_check}

 

data부분에 서버에게 보낼 데이터 값들을 전달하고 

success: function (response) {
    if (response['result'] == true) {
        //jquery를 활용한 쿠키에 토큰을 저장한다. 이 쿠키의 이름은 mytoken이다.
        //https://doqtqu.tistory.com/277 토큰 저장 장소로 쿠키의 장단점.
        $.cookie('mytoken', response['token']);
        window.location.href = '/';
    } else {
        alert(response['msg']);
        window.location.reload();
    }
},

성공적으로 서버에서 일련의 작업들이 이뤄졌다면 response를 통해서 서버가 보낸 데이터들을 가져와서 쓸 수 있다. 이런식으로 서버와 클라이언트의 소통들은 api를 통해서 이뤄지는 것이다.

 

3. API 유형

3-1. private API : 내부 API로 개발자를 제외한 제 3자에게 노출되지 않습니다.

3-2. public API : 개방 API로 모두에게 공개됩니다. 누구나 제한없이 접근할 수 있습니다.

3-3. partner API: 파트너 API로 동의를 받은 특정인들만 접근할 수 있습니다.

'' 카테고리의 다른 글

무중단 배포란?  (0) 2022.06.04
WebRTC란? Socket.IO를 활용하여 Signaling Server를 구현하기  (0) 2022.05.24
CORS란 무엇인가? SOP란 무엇인가?  (0) 2022.02.13
http와 https란?  (0) 2022.01.20
JWT(JSON Web Token) 이해하기  (0) 2022.01.16