본문 바로가기

백엔드

API 개발하기(미니터 : 회원가입)

반응형
깔끔한 파이썬 탄탄한 백엔드
CHAPTER 5 "본격적으로 API 개발하기"

 

구현할 API 시스템 : 미니터(Miniter)

미니터는 미니 트위터를 줄인 말

축소된 트위터 시스템

 

[ 미니터의 기능 ]

  • 회원가입
  • 로그인
  • 트윗
  • 다른 회원 팔로우하기
  • 다른 회원 언팔로우하기
  • 타임라인(해당 사용자 그리고 사용자가 팔로워하는 사용자들의 트윗들)

 

회원가입

회원가입에 필요한 정보는 다음과 같다.

  • id
  • name
  • email
  • password
  • profile

다음은 회원가입 기능을 구현하는 엔드포인트다.

 

from flask import Flask, jsonify, request

필요한 Flask 모듈을 임포트한다. request를 통해 사용자가 HTTP 요청을 통해 전송한 JSON 데이터를 읽어들일 수 있다. jsonify는 dictionary 객체를 JSON으로 변환하여 HTTP 응답으로 보낼 수 있게 된다.

 

app.users = {}

새로 가입한 사용자를 지정할 dictionary를 users란 변수에 정의한다. 키는 사용자 아이디가 될 것이며, 값은 dictionary에 저장되어 있는 사용자 정보이다.

 

app.id_count = 1

회원가입하는 사용자의 id 값을 저장하는 변수이다. id는 1부터 시작하며 새로운 사용자가 회원가입할 때마다 id 값이 하나씩 증가한다.

 

@app.route("/sign-up", methods=['POST'])

"/ping" 엔드포인트와 마찬가지로 route 데코레이터를 사용해서 엔드포인트를 정의한다. 엔드포인트의 고유 주소는 "/sign-up"으로 정의하고, HTTP 메소드는 POST로 한다.

 

new_user = request.json

HTTP 요청을 통해 전송된 회원 정보를 읽어 들인다. request는 엔드포인트에 전송된 HTTP 요청 정보(헤더, body 등)을 저장하고 있다. request.json은 해당 HTTP 요청을 통해 전송된 JSON 데이터를 파이썬 dictionary로 변환해준다.

 

new_user["id"] = app.id_count

HTTP 요렁으로 전송된 회원가입 정보에 id 값을 더하여 준다.

 

app.users[app.id_count] = new_user

회원가입하는 사용자의 정보를 dictionary에 저장한다.

 

app.id_count = app.id_count + 1

id_count, 즉 id 값에 1을 더해준다. 그럼으로써 다음 회원 id 값이 ㅇ미ㅣ 회원가입한 사용자들의 id 값과 겹치지 않게 ㅏ한다.

 

return jsonify(new_user)

회원가입한 사용자들의 정보를 JSON 형태로 전송한다. jsonify를 사용해 dictionary를 JSON으로 변환한다. status code는 200이 된다, 원래는 status code도 지정해주어야 하지만, 만일 지정해주지 않으면 디폴트 값으로 200이 리턴이 된다.

 

 


 

app.py 파일에 "/ping" 엔드포인트 아래에 회원가입 엔드포인트를 다음과 같이 추가하자.

 

회원가입 엔드포인트를 추가 하였다면 실행시켜보도록 하자. 터미널을 열고 "app.py"파일이 있는 디렉터리로 이동 후 flask 실행!

 

정상적으로 실행이 되었으면 실제로 회원가입 요청을 보내보도록 하자.

httpie를 사용하여 터미널에서 회원가입 HTPP 요청을 보내보자!

 

참고로 기존에 있던 cmd 창 말고 다른 cmd 창을 이용하자! (2개의 cmd 창 이용!)

 

HTTP 응답으로 200 OK가 전송되었으면 회원가입 엔드포인트가 성공적으로 작동하는 것이다!

나머지 엔드포인트는 다음 포스팅에서 이어가도록 하겠다.

 

반응형

'백엔드' 카테고리의 다른 글

API 개발하기(미니터 : 팔로우)  (0) 2021.08.08
API 개발하기(미니터 : 트윗)  (0) 2021.08.07
Do it! 모델 만들기  (0) 2021.08.06
플라스크 ORM 라이브러리 사용하기  (0) 2021.08.06
ORM(object relational mapping)  (0) 2021.08.06