기본 콘텐츠로 건너뛰기

[Flask] 파이썬 Flask를 이용하여 REST API 만들기 - 2

[Flask] 파이썬 Flask를 이용하여 REST API 만들기 - 2

# Flask

1. REST API란?

REST API란 Representational State Transfer의 약자로 자원의 이름을 기반으로 하여 상태를 주고 받는 것을 뜻합니다. JSON이나 XML의 형태로 데이터를 주고 받는 것이 일반적이며 URI(Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP 프로토콜에서 제공하는 메소드를 활용해 해당자원에 대한 CRUD를 동작하게 하는 API입니다.

※CRUD = Create, Read, Update, Delete

2. URL과 URI의 차이

URL은 Uniform Resource Locator로써 해당 경로에 실제 존재하는 자원의 위치를 가르키는 것입니다. 예를 들어 http://rekt77.tistory.com/test.txt 라는 URL은 웹 서버 root 디렉터리에 실제로 존재하는 test.txt 파일을 요청하기 위한 주소입니다.

반면 URI는 Uniform Resource Identifier로써 요청하는 주소가 실제 존재하는 파일이라기 보다는 기능을 하기위한 구분자로 보는 것입니다. 이전 강의에서 Flask를 통해 /user라는 URI에 요청이 들어왔을 때 특정 동작을 실행하게 끔 구현했었던 것을 기억하실 겁니다. 실제 우리 서버 안에는 user라는 파일은 존재하지 않습니다. 단지 자원의 구분자로써의 역할을 하며 접근하는 구분자에 따라 CRUD operation을 실행하게 하는 주소입니다.

URL은 URI의 하위 개념입니다. 정확하게 말하자면 URI는 URL의 개념을 포함하고 있기때문에 위에서 언급한 http://rekt77.tistory.com/test.txt는 URI라고도 할 수 있는 것이죠. 하지만 URI는 URL의 상위 개념이기 때문에 /user라는 주소는 URL이 될 수 없습니다.

3. Flask를 이용한 기본적인 REST API 구현

Flask는 API설계를 가장 간단하게 할 수 있는 프레임워크중 하나 입니다. 먼저 REST API를 구축하기위해서 데이터를 json형식으로 리턴해야 합니다. Flask는 데이터를 json형식으로 치환하기 위한 jsonify라는 함수를 제공하고 있습니다.

또한 요청이 들어왔을 때 HTTP 메소드 별로 실행 루틴을 다르게 구현할 수 있습니다. 또한 json형태의 데이터를 받아오기위하여 Flask내에 request라는 클래스를 사용할 것입니다.

사실 REST API는 GET, POST 외에 PUT과 DELETE 메소드를 사용해서 CRUD operation을 구축해야 합니다. 하지만 이 두개의 메소드는 보안상의 취약점이 존재하고 있어 일반적인 상황에서는 사용이 어렵습니다.

※ CRUD 매핑: POST - CREATE, GET - READ, PUT - UPDATE, DELETE - DELETE

※ GET - URI에 주소에 파라미터를 추가하여 요청하는 방식(HTTP Header에 추가하는 방식)

※ POST - HTTP Body에 데이터를 추가하여 요청하는 방식

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from flask import Flask, request, jsonify app = Flask(__name__) @app.route( '/userLogin' , methods = [ 'POST' ]) def userLogin(): user = request.get_json() #json 데이터를 받아옴 return jsonify(user) # 받아온 데이터를 다시 전송 @app.route( '/environments/' ) def environments(language): return jsonify({ "language" :language}) if __name__ = = "__main__" : app.run() Colored by Color Scripter cs

위 코드를 실행시키면 127.0.0.1:5000/ 아래에 두개의 URI가 생성됩니다. userLogin과 environments인데요 userLogin은 POST 방식으로 접근해야하는 API입니다. 동작방식은 받은 json을 그대로 돌려주는 형태입니다. environments는 URI 마지막 구분자에 넣어준 값을 json형태로 반환해주는 API입니다. 이 때의 키 값은 language가 됩니다.

그러면 위의 소스코드를 실행 시키고 테스트를 진행해 보겠습니다. test하기위한 도구는 Restlet 입니다.

링크: https://chrome.google.com/webstore/detail/restlet-client-rest-api-t/aejoelaoggembcahagimdiliamlcdmfm

Restlet은 Rest API를 테스트 하는데 사용하는 chrome 웹 브라우저의 익스텐션입니다. 사용방법이 간편하며 성능이 뛰어납니다. 회원가입 하시고 로그인 하시면 아래와 같은 화면을 볼 수 있습니다.

Restlet 메인화면

먼저 상단의 requests를 선택하여 요청을 생성하겠습니다. GET 메소드를 테스트 할 것이기 때문에 메소드를 GET으로 놓고 URI를 명시해줍니다. http://127.0.0.1:500/environsments/python으로 실행하겠습니다. SEND 버튼을 눌러 요청을 보내면 보시는 바와 같이 Response가 도착하는데요 200 OK라는 Status code는 웹 요청이 정상적으로 이루어 졌고 응답을 받았다고 이해하시면 됩니다. Response 헤더는 전송받은 데이터 타입에 따라 변경되는 데요 json을 받았기 때문에 application/json으로 설정되어있습니다.

그리고 제가 의도 한대로 json이 응답으로 도착한 것을 볼 수 있습니다.( {'language':'python'})

이번에는 POST를 테스트 해보겠습니다.

POST 실행결과

메소드를 POST로 설정하고 URI를 명시합니다. 이후에 HEADER 설정이 중요한데요, 우리는 json형태의 데이터를 전송할 것이기 때문에 Content-Type을 application/json으로 설정합니다. 그리고 BODY 값에 원하는 json을 넣어주시면 전송한 json이 그대로 도착할 것입니다.

맨 마지막 빨간색 박스를 보시면 Response가 들어있습니다. json을 받았기 때문에 역시 Contnet-Type은 application/json입니다. 그리고 Response Body값으로 {"userName":"rekt77"}이 도착한 것을 볼 수 있습니다.

from http://rekt77.tistory.com/104 by ccl(A) rewrite - 2020-03-06 03:54:14

댓글

이 블로그의 인기 게시물

2020년의 웹 기술 개발 스택

2020년의 웹 기술 개발 스택 웹 응용 프로그램을 개발할 때 고려해야 할 가장 중요한 것은 앱의 기반이 되는 기술 스택이다. 적절한 기술 스택을 통해 적은 예산으로 가장 큰 효과를 제공하는 것은 기업 입장에서는 특히 어려운 과제이며 올바른 기술 스택 사용은 프로젝트의 성공과 실패를 결정짓는 중요한 열쇠다. 물론 필자는 프로젝트를 직접 운영하고 있지도 않고, 사용할 기술 스택을 선택할 입장이 아니기 때문에 해당 사항이 없다. 하지만 2020년을 살아가는 Front-End 개발자로서 쌓아나가야 할 기술 스택의 방향성을 정하는 데 도움이 되고자 포스팅을 해본다. 2020년 웹 기술 개발 스택 최신 웹 기술 스택을 선택하기 이전에 웹 응용 프로그램 개발 프로세스 구성요소를 명확하게 이해해야 한다. 웹 개발에는 크게 클라이언트 쪽과 서버 쪽의 두 가지로 나뉜다. 클라이언트 측 프로그래밍 (Front-End) 웹 개발에는 사용자가 화면에서 보는 모든 것이 포함된다. 주요 프론트엔드 기술 스택 구성 요소는 다음과 같다. HTML (Hyper Markup Language) 및 CSS (Cascading Style Sheets) HTML은 브라우저에게 웹 페이지의 내용을 표시하는 방법을 알려준다. CSS는 그 내용을 스타일링 한다. (+) Bootstrap : HTML, CSS 관리에 유용한 프레임워크 JavaScript (JS) 웹 페이지를 대화식으로 만든다. 더 빠르고 쉬운 웹 개발을 위한 많은 JS 라이브러리와 프레임워크가 있다. - 라이브러리 : jQuery, React.js 및 Zepto.js - 프레임워크 : Angular, Vue, Backbone 및 Ember) 서버 측 프로그래밍 (Back-End) 서버 측은 어플리케이션(Back-End), 데이터베이스 및 서버 자체가 포함된다. 사용자에게 보이지 않지만 발전소가 집에 전기를 생성하는 것처럼 클라이언트 측에 전원을 공급하는 역할을 한다. 문제는 주로 웹 응용 프로그...

[ubuntu] FLASK_APP

[ubuntu] FLASK_APP Development/Debugging 🐞 FLASK_ENV=development FLASK_APP = app.py flask run zsh: command not found: FLASK_APP ✔️ FLASK_ENV=development FLASK_APP=app.py flask run 띄어쓰기를 해서 저런 오류를 출력할수도 있구나 😲 참고 : 108p에서 FLASK가 FKAS로 오타나있다. from http://hee-stories.tistory.com/18 by ccl(A) rewrite - 2020-03-24 17:20:11

외래어 정리

외래어 정리 [A] acacia 아카시아 academic 아카데믹 academy 아카데미 acanthus 아칸서스 accelerator 액셀러레이터 accent 악센트 acceptor 억셉터 access 액세스 accessory 액세서리 accordion 아코디언 ace 에이스 acetate 아세테이트 acetaldehyde 아세트알데히드 acetic acid 아세트(산) acetone 아세톤 acetyl 아세틸 acetylene 아세틸렌 Achilles tendon 아킬레스(건) acre 에이커 acrylic acid 아크릴(산) action 액션 active 액티브 acyl 아실 AD 에이디 adagio 아다지오 adapter 어댑터 ad + balloon 애드벌룬 address 어드레스 adenine 아데닌 adrenaline 아드레날린 advantage 어드밴티지 aerobic dance 에어로빅 댄스 aerofoil 에어로포일 aerosol 에어로졸 afghan 아프간 [편물] after + service 애프터서비스 agape 아가페 Ainu 아이누 air conditioner 에어컨(디셔너) airspray 에어스프레이 album 앨범 albumin 알부민 alcohol 알코올 aldehyde 알데히드 ALGOL 알골 algorism 알고리즘 alibi 알리바이 alkali 알칼리 alkaloid 알칼로이드 Allah 알라 allegory 알레고리 allegretto 알레그레토 allegro 알레그로 alleluia 알렐루야 Allergie 알레르기 alligator 앨리게이터 all-in-one 올인원 almond 아몬드 aloha 'oe 알로하 오에 Alpenhorn 알펜호른 alpha 알파 alphabet 알파벳 ...