본문 바로가기

Restful API28

[Restful API] Restful API 방식으로 서버 개발 총 정리 순서 기획(화면기획서) DB테이블설계 API개발(서버개발) 1. MySQL Workbench 접속 해당 서비스용 계정을 만들기 위해 admin 계정으로 접속해서 DB와 유저를 만든다. ※ DB는 utf8 / utf8_unicode_ci로 만든다. use mysql; create user '유저네임'@'%'identified by '비밀번호'; grant all on DB이름.* to '유저네임'@'%'; 홈으로 돌아가 만든 DB와 유저를 입력해 새로운 커넥션 만들고 화면기획서에 맞게 테이블 생성한다. ※ 테이블에 컬럼을 만들때 안드로이드 개발과의 일관성 위해 컬럼은 헝가리안 표기법 사용한다. 헝가리안 표기법 = 자바의 카멜 표기법과 동일 -> 한칸 띄우거나 _ 쓰지않고 대문자 사용 ex) createdA.. 2023. 12. 18.
[Restful API] 네이버 검색 API 사용해보기 네이버 검색(뉴스) API 사용하기 네이버 Papago API 사용 참고) https://dongsu96.tistory.com/146 뉴스 검색 API 레퍼런스 참고) https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4 -> 설명서 캡쳐(1) -> 설명서 캡쳐(2) -> 설명서 캡쳐(3) 요청 화면(Postman) -> 위 API 레퍼런스를 참고하여 postman에 요청한다. -> 잘 응답한 모습. 검색에 해당하는 query 부분은 description의 태그 안에 들어있다. 2023. 12. 18.
[Restful API] 이미지와 내용을 포스팅하는 API 만들기 -> postman에서 http method는 post, Body의 form-data에 File으로 파일 세팅, Text로 내용을 세팅해논다. def post(self) : file = request.files.get("photo") content = request.form.get("content") if file is None : return {"error" : "파일이 없습니다."}, 400 current_time = datetime.now() new_file_name = current_time.isoformat().replace(":", "_") + ".jpg" file.filename = new_file_name s3 = boto3.client("s3", aws_access_key_id = Con.. 2023. 12. 18.
[Restful API] 사진을 보내면 해당 사진에 어떤 물체가 있는지 알려주는 API 만들기 (Object detection API, Rekognition) Object detection API = 해당 사진에 어떤 물체가 있는지 알려주는 API이다. -> google Vision API, Amazon Rekognition 등이 있다. 아마존의 Rekognition를 이용) -> postman에서 http method는 post, url 설정, Body에 form-data엔 Key와 Value(보낼 이미지 파일)을 세팅해논다. def post(self) : file = request.files.get("photo") if file is None : return {"error" : "파일이 존재하지 않습니다."}, 400 current_time = datetime.now() new_file_name = current_time.isoformat().replace.. 2023. 12. 18.
[Restful API] 이미지를 S3에 업로드하는 API 만들기 AWS의 S3을 생성한 후(참고 : https://dongsu96.tistory.com/131 ) 이미지를 내면 AWS의 S3에 업로드하게 하는 API 만들기 -> postman에서 Body의 form-data에 File 형식으로 바꿔서 Key값과 Value(사진)을 세팅해논다. def post(self) : file = request.files.get("photo") if file is None : return {"error" : "파일을 업로드 하세요."}, 400 # 파일명을 회사의 파일명 정책에 맞게 변경 # 파일명은 유니크 해야 한다. current_time = datetime.now() new_file_name = current_time.isoformat().replace(":", "_") +.. 2023. 12. 18.
[Restful API] 네이버 Papago API 사용해보기 먼저 네이버 developer 사이트에 어플리케이션을 등록한다. -> https://developers.naver.com/apps/#/register -> 사용할 API을 선택한다. (검색, papgo 번역), 그 후 등록을 완료한다. 등록 완료 후, API 레퍼런스탭의 설명을 보며 진행한다. -> https://developers.naver.com/docs/papago/papago-nmt-api-reference.md#%EC%9A%94%EC%B2%AD-url -> 요청할 URL -> http method는 post로, -> Body엔 json으로 위 설명서를 보고 참고해서 작성한다.(Postman) -> http 헤더엔 애플리케이션 등록 시 발급 받은 클라이언트 아이디와 클라이언트 시크릿이 필요하다고 .. 2023. 12. 18.
[Restful API] [Error] Object of type Decimal is not JSON serializable 에러 해결 방법 Object of type Decimal is not JSON serializable -> (Decimal 유형의 객체는 JSON 직렬화가 가능하지 않습니다) 위 오류는 select 쿼리인 경우에, cursor에서 execute 후 cursor.fetchall()로 결과 리스트를 가져올 때 주로 발생했다. 결과리스트를 json 형식으로 클라이언트에게 보내야 하는데 그러기 위해선 데이터의 타입이 문자열이나 숫자여야 한다. datetime 타입이거나 decimal 타입일 경우 문자열이나 숫자타입으로 변환해서 클라이언트에게 보내야 한다. 해결 방법) i = 0 for row in result_list : result_list[i]["year"] = row["year"].isoformat() result_lis.. 2023. 12. 12.
[Restful API] Query String(Query Parameter) 페이징 처리하는 방법 -> Postman에서 URL의 query string 부분에 변수명=값&변수명=값 형식으로 쓰거나, Params 탭에 Key엔 변수명 Value엔 값을 넣어준다. 두 가지 방식 다 가능. @jwt_required() def get(self) : user_id = get_jwt_identity() # 쿼리스트링(쿼리 파라미터)에 있는 데이터를 받아온다. offset = request.args.get("offset") limit = request.args.get("limit") try : connection = get_connection() query = ''' select id, title, date, content from summary where userId = %s order by date asc .. 2023. 12. 8.
[Restful API] 로그아웃 API 만드는 방법 from resources.user import jwt_blocklist # 로그아웃된 토큰으로 요청하면, 실행되지 않게 처리하는 코드 @jwt.token_in_blocklist_loader def check_if_token_is_revoked(jwt_header, jwt_payload) : jti = jwt_payload['jti'] return jti in jwt_blocklist -> 첫 실행 파일인 app.py 파일에 작성한다. from flask_jwt_extended import get_jwt, jwt_required jwt_blocklist = set() class UserLogoutResource(Resource) : @jwt_required() def delete(self) : jti =.. 2023. 12. 7.
[Restful API] 로그인한 유저만 처리할 수 있는 API에 토큰 적용하는 방법 -> 로그인 API에서 로그인 시 JWT 토큰을 발급 받고 클라이언트에게 response 했을 때 모습이다 -> access_token 값을 복사한다. -> 그 후 Postman에서 Headers의 Key에는 Authorization을, Value에는 Bearer 복사한 토큰값을 적고 체크한다. from flask_jwt_extended import get_jwt_identity, jwt_required @jwt_required() def get(self) : user_id = get_jwt_identity() try : connection = get_connection() -> (일부만 빼낸 코드) -> @jwt_required() = jwt토큰이 Headers에 필수로 있어야 한다는 뜻이다. 토큰이 .. 2023. 12. 7.