미니터의 메인 기능인 300자 제한 트윗 글 올리기 엔드포인트를 구현한다.
다음과 같은 요소들이 필요하다
우리가 보게 될 JSON 데이터(결과)는 아래와 같다.
{
"id : 1,
"tweet" : "My First Tweet"
}
"id : 1,
"tweet" : "My First Tweet"
엔드포인트는 아래와 같이 구현이 된다.
app.tweets = []
@app.route('/tweet', methods=['POST'])
def tweet():
payload = request.json
user_id = int(payload['id'])
tweet = payload['tweet']
if user_id not in app.users:
return '유저가 존재 하지 않습니다', 400
if len(tweet) > 300:
return '300자를 초과했습니다', 400
user_id = int(payload['id'])
app.tweets.append({
'user_id' : user_id,
'tweet' : tweet
})
return '', 200
app.tweets = []
@app.route('/tweet', methods=['POST'])
: 엔드포인트의 주소는 "/tweet"이고 HTTP 메소드는 POST이다.
payload = request.json
user_id = int(payload['id'])
tweet = payload['tweet']
: HTTP 요청으로 전송된 JSON 데이터에서 "tweet" 필드를 읽어 들여 사용자의 tweet 내용이 300자를 넘었는지를 확인한다.
if user_id not in app.users:
return '유저가 존재 하지 않습니다', 400
: 만일 해당 사용자 아이디가 존재하지 않으면 400 Bad Request 오류 메시지를 전송한다.
if len(tweet) > 300:
return '300자를 초과했습니다', 400
: 만일 사용자의 트윗이 300자를 넘었으면 "300자를 초과했습니다"라는 메시지와 함께 400 Bad Request 응답을 보낸다.
user_id = int(payload['id'])
: HTTP 요청으로 전송된 JSON 데이터에서 사용자 아이디를 읽어 들인다.
app.tweets.append({ 'user_id' : user_id, 'tweet' : tweet })
: 해당 사용자 아이디와 트윗을 딕셔너리로 생성해서 app.tweets 리스트에 저장시킨다.
📌️ 사용자의 신분 확인을 단순히 HTTP 요청에 포함된 JSON 데이터에 속해 있는 아이디 값으로 판명하는 것은 보안적으로 문제가 있다.
앞으로 데이터베이스에 연결시키고 인가 엔드포인트를 구현하면서 보안 부분은 더 강화될 것이다.
회원가입 엔드포인트처럼 "tweet" 엔드포인트를 "app.py" 파일에 추가한 후 실행시켜보자.
그리고 실제로 트윗을 보내보도록 하자.
만약 "사용자가 존재하지 않습니다"라는 메시지와 400 Bad Request 응답이 온다면
해당 사용자가 없기 때문에 발생한 문제이므로 먼저 회원가입 엔드포인트를 통해 사용자를 생성한 후
다시 시도해보면 될 것이다.
주의해야할 것은,
이미 사용자를 생성했더라도 API가 재실행되면 기존에 생성했던 사용자 및 데이터들은 전부 지워진다.
지금은 데이터 베이스에 데이터를 저장하는 것이 아닌 메모리 상에서 저장하는 것이므로
서버가 재실행이 되는 순간 메모리상의 데이터들은 전부 지워지게 되니 유의해야 한다.
깔끔한 파이썬 탄탄한 백엔드 / 저자: 송은우