사용자의 트윗들과 팔로우하는 사용자들의 트윗들을 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
단 , 이 명령어를 실행하기 전에 앞서서 만들었던 엔드포인트들을 거쳐야 한다.
(서버가 꺼졌다가 다시 올라가면 이전에 했던 회원가입, 팔로우, 트윗 등이 다 날아간다)
정상적으로 출력됨을 볼 수 있다.
좋아요