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 |