해당 코드는 기본적인 flask 기반으로 만들어진
RESTful web api 혹은 web app이다
기본 구성은 다음과 같고 활에 따라서 조금씩 바꿔서 쓰면 될거 같다
당연히 코드는 파이썬
스펙은 다음과 같다. 내가 생각하기에 web api를 구성하기 위한 기본적인건 다 포함됐지 싶다.
1. GET 처리 가능
2. POST로는 json입력을 받을 수 있음
3. 404 에러 핸들링이 포함 되어 있음
4. 인증이 포함되어 있음, 아이디: admin, pw: secret 임.
5. app.log라는 파일에 로그도 찍음
from flask import Flask,request,jsonify import logging from functools import wraps app = Flask(__name__) file_handler = logging.FileHandler('app.log') app.logger.addHandler(file_handler) app.logger.setLevel(logging.INFO) def requires_auth(f): @wraps(f) def decorated(*args, **kwargs): auth = request.authorization if not auth: return authenticate() elif not check_auth(auth.username, auth.password): return authenticate() return f(*args, **kwargs) return decorated @app.route('/ntalk', methods = ['GET', 'POST']) @requires_auth def response(): # logging app.logger.info(str(request)) # get handling if request.method == 'GET': if 'code' in request.args: return "code: " + request.args['code']+"\n" # post handling elif request.method == 'POST': if request.headers['Content-Type'] == 'application/json': input_json = request.get_json() data = { 'msg' : input_json['message'], 'number' : 3 } resp = jsonify(data) resp.status_code = 200 return resp # 404 error handling @app.errorhandler(404) def not_found(error=None): message = { 'status': 404, 'message': 'Not Found: ' + request.url, } resp = jsonify(message) resp.status_code = 404 return resp def check_auth(username, password): return username == 'admin' and password == 'secret' def authenticate(): message = {'message': "Authenticate."} resp = jsonify(message) resp.status_code = 401 resp.headers['WWW-Authenticate'] = 'Basic realm="Example"' return resp if __name__ == "__main__": app.run(debug = True, port = 8808, host = '0.0.0.0')
|
위를 테스트 해보자
먼저 GET
curl -u "admin:secret" -H "Content-type: application/json" -X GET http://127.0.0.1:8808/ntalk?code=10 |
code: 10 |
이제 POST
명령어 |
curl -u "admin:secret" -H "Content-type: application/json" -X POST http://127.0.0.1:8808/ntalk -d '{"message":"Hello Data"}' |
결과 |
{ "hello": "world", "number": 3 } |
그러하다
'백앤드 개발' 카테고리의 다른 글
웹 서비스 구성 형태(파이썬 기준) (0) | 2017.11.02 |
---|---|
보초를 위한 Git 이용한 프로젝트 관리 방법 (0) | 2017.09.01 |
git 새 브랜치 만드는 법 (0) | 2017.08.16 |
서버 개발에 필요한 간단한 질문과 답 (0) | 2016.06.28 |
리눅스 개발시 주요 단축키 모음(계속 업뎃중) (0) | 2016.06.27 |