타임라인 엔드포인트
마지막으로 사용자 타임라인 엔드포인트를 구현해보자!
트위터의 타임라인처럼 해당 사용자의 트윗들 그리고 팔로우하는 사용자들의 트윗들을 리턴해주는 엔드포인트다.
타임라인 엔드포인트는 데이터의 수정이 없이 받아오기만 하는 엔드포인트이므로, HTTP 메소드는 GET이 될 것이다. 그리고 타임라인 엔드포인트가 리턴하는 JSON 데이터는 다음과 같은 형태의 데이터를 리턴한다.
타임라인 엔드포인트 구현
@app.route('/timeline/<int:user_id>', methods=['GET'])
엔드포인트의 주소에서 <int:user_id> 부분을 볼 수 있다. 엔드포인트의 주소에 해당 사용자의 아이디를 지정할 수 있게 해준다.
def timeline(user_id):
타임라인 엔드포인트를 구현하는 함수에 user_id를 인자로 받는 것을 볼 수 있다. 위에서 지정한 엔드포인트 주소를 통해서 받는 값이며, 해당 사용자의 아이디다.
follow_list = app.users[user_id].get('follow', set())
먼저 해당 사용자가 팔로우하는 사용자들 리스트를 읽어들인다. 만일 사용자가 다른 사용자를 팔로우 한 적이 없는 경우 follow 필드가 존재하지 않을 수도 있다. 그런 경우 empty 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})
사용자 아이디와 함께 타임라인을 JSON 형태로 리턴한다.
이제 API를 실행시킨 후 타임라인 엔드포인트를 호출해보자.
주의할 점은 계속해서 언급했듯이 사용자들을 생성해야 하며, 각 사용자마다 트윗을 생성하고 또한 사용자 팔로우를 해놓아야 한다는 것이다.
1. 사용자 생성
http -v POST localhost:5000/sign-up name=수지 email=csj8073@naver.com password=1234
2. 사용자 팔로우
http -v POST localhost:5000/follow id:=1 follow:=2
3. 사용자 트윗 생성
http -v POST localhost:5000/tweet id:=1 tweet="My First tweet"
http -v GET localhost:5000/timeline/1
짜잔 성공적으로 타임라인 엔드포인트가 구현되었다.
전체 코드는 "깔끔한 파이썬 탄탄한 백엔드" 책의 깃허브 리포지토리에서 확인할 수 있다.
https://github.com/rampart81/python-backend-book/tree/master/chapter5
API 개발 끝!
'백엔드' 카테고리의 다른 글
SQL(Structured Query Language) (0) | 2021.08.10 |
---|---|
데이터베이스(Database) (0) | 2021.08.10 |
API 개발하기(미니터 : 팔로우) (0) | 2021.08.08 |
API 개발하기(미니터 : 트윗) (0) | 2021.08.07 |
API 개발하기(미니터 : 회원가입) (0) | 2021.08.07 |