Python BackEnd: 클론 코딩(3)

0

BackEnd with Python

목록 보기
7/9
post-thumbnail

타임라인 엔드포인트 구현해보기

사용자의 트윗들과 팔로우하는 사용자들의 트윗들을 return하는 엔드포인트다.
타임라인 엔드포인트는 데이터의 수정 없이 받아오기만 한다.
따라서 HTTP 메소드는 GET이 될 것이다.

타임라인 엔드포인트가 return하는 JSON데이터는 다음과 같다.

{
    "user_id"  : 1,	# 사용자의 아이디
    "timeline" : [	# 사용자 & 사용자가 follow한 사용자들의 트윗 리스트
        {
            "user_id" : 2,		# 사용자가 follow한 사용자의 id
            "tweet"   : "Hello, World!" # 사용자가 follow한 사용자가 쓴 트윗
        },
        {
            "user_id" : 1,			# 사용자(본인) 아이디
            "tweet"   : "My first tweet!"	# 사용자(본인)가 쓴 트윗
        }
    ]
}

트윗 엔드포인트에서
사용자들의 트윗을 app.tweets 이라는 List에 저장한 것을 기억하며 스스로 짜보라고 한다.

해본다

@app.route('/timeline', methods=['POST'])
def timeline():

모르겠다.
만약에 내가 $ http -v GET http://localhost:5000/timeline id=1
이렇게 요청을 넣는다면?

그냥 답지 보겠음.

타임라인 엔드포트를 구현하는 예제 코드

@app.route('/timeline/<int:user_id>', methods=['GET'])
def timeline(user_id):
    if user_id not in app.users:
        return 'undefined user', 400
    
    follow_list = app.users[user_id].get('follow', set())
    follow_list.add(user_id)
    timeline = [tweet for tweet in app.tweets if tweet['user_id']
    in follow_list]
    
    return jsonify({
        'user_id'  : user_id,
        'timeline' : timeline
    })

아하
.get이 있었구나.

timeline = [tweet for tweet in app.tweets if tweet['user_id' in follow_list]
컴프리헨션으로 알고 있는데 마지막에 if가 쓰이는 것이 쿼리문과 닮은 것처럼 보인다.

tweet['user_id'] in follow_list

follow_list에 특정 id가 있을 경우에 app.tweets으로부터 트윗들을 가져오는 형식이다.

이제 이걸 app.py에 예쁘게 집어넣어서 명령어로 실행해봐야겠다.

$ http -v GET http://localhost:5000/timeline/1
단 , 이 명령어를 실행하기 전에 앞서서 만들었던 엔드포인트들을 거쳐야 한다.
(서버가 꺼졌다가 다시 올라가면 이전에 했던 회원가입, 팔로우, 트윗 등이 다 날아간다)

정상적으로 출력됨을 볼 수 있다.

2개의 댓글

comment-user-thumbnail
2021년 11월 27일

좋아요

1개의 답글