⚡️ API 개발 with Flask - 3

codeamor·2020년 7월 4일
0

API Development

목록 보기
3/9

✔️ 300자 제한 트윗 글 올리기

미니터의 메인 기능인 300자 제한 트윗 글 올리기 엔드포인트를 구현한다.
다음과 같은 요소들이 필요하다

  • 사용자는 300자를 초과하지 않는 글을 올릴 수 있다.
  • 만일 300자를 초과하면 엔드포인트는 400 Bad Request 응답을 보내야 한다.
  • 사용자가 300자 이내의 글을 전송하면 엔드포인트는 사용자의 글을 저장하고 있어야 한다.
    그래서 사용자의 타임라인 엔드포인트를 통하여 읽을 수 있도록 해야 한다.

우리가 보게 될 JSON 데이터(결과)는 아래와 같다.

{
    "id     : 1,
    "tweet" : "My First Tweet"
}
  1. "id : 1,
    : 트윗을 보내는 해당 사용자의 아이디

  2. "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
  1. app.tweets = []
    : 사용자들의 트윗들을 저장할 디렉토리이다.
  • key는 사용자 아이디이고, value는 사용자들의 트윗을 담고 있는 리스트다.

  1. @app.route('/tweet', methods=['POST'])
    : 엔드포인트의 주소는 "/tweet"이고 HTTP 메소드는 POST이다.

  2.     payload = request.json
        user_id = int(payload['id'])
        tweet   = payload['tweet']

    : HTTP 요청으로 전송된 JSON 데이터에서 "tweet" 필드를 읽어 들여 사용자의 tweet 내용이 300자를 넘었는지를 확인한다.

  3.     if user_id not in app.users:
            return '유저가 존재 하지 않습니다', 400

    : 만일 해당 사용자 아이디가 존재하지 않으면 400 Bad Request 오류 메시지를 전송한다.

  4.     if len(tweet) > 300:
            return '300자를 초과했습니다', 400

    : 만일 사용자의 트윗이 300자를 넘었으면 "300자를 초과했습니다"라는 메시지와 함께 400 Bad Request 응답을 보낸다.

  5. user_id = int(payload['id'])
    : HTTP 요청으로 전송된 JSON 데이터에서 사용자 아이디를 읽어 들인다.

  6. app.tweets.append({ 'user_id' : user_id, 'tweet' : tweet })
    : 해당 사용자 아이디와 트윗을 딕셔너리로 생성해서 app.tweets 리스트에 저장시킨다.

  • 곧 구현할 타임라인 엔드포인트에서 app.tweets 리스트를 읽어 들이게 된다.

📌️ 사용자의 신분 확인을 단순히 HTTP 요청에 포함된 JSON 데이터에 속해 있는 아이디 값으로 판명하는 것은 보안적으로 문제가 있다.
앞으로 데이터베이스에 연결시키고 인가 엔드포인트를 구현하면서 보안 부분은 더 강화될 것이다.

회원가입 엔드포인트처럼 "tweet" 엔드포인트를 "app.py" 파일에 추가한 후 실행시켜보자.
그리고 실제로 트윗을 보내보도록 하자.

만약 "사용자가 존재하지 않습니다"라는 메시지와 400 Bad Request 응답이 온다면
해당 사용자가 없기 때문에 발생한 문제이므로 먼저 회원가입 엔드포인트를 통해 사용자를 생성한 후
다시 시도해보면 될 것이다.

주의해야할 것은,
이미 사용자를 생성했더라도 API가 재실행되면 기존에 생성했던 사용자 및 데이터들은 전부 지워진다.
지금은 데이터 베이스에 데이터를 저장하는 것이 아닌 메모리 상에서 저장하는 것이므로
서버가 재실행이 되는 순간 메모리상의 데이터들은 전부 지워지게 되니 유의해야 한다.



Reference

0개의 댓글