Waffleweb으로 기본 API를 만드는 방법
Waffleweb을 모르는 사람들을 위해 Python 웹 프레임워크입니다. 가볍고 사용자 정의가 가능합니다. https://github.com/Berserkware/waffleweb에서 Waffleweb을 찾을 수 있습니다.
전제 조건
API를 생성하려면 Python과 Waffleweb이 설치되어 있어야 합니다. 사용 가능한 Python 설치 방법에 대한 많은 자습서가 있으므로 Waffleweb 설치 방법만 표시됩니다.
와플웹 설치
pip을 사용하면 Waffleweb을 쉽게 설치할 수 있습니다.
pip install waffleweb
프로젝트 설정
프로젝트를 설정하려면 main.py 파일을 생성하기만 하면 됩니다. main.py 파일은 모든 경로가 있는 파일입니다. 또한 웹 서버를 실행합니다. 지금은 코드를 따라야 합니다.
main.py:
from waffleweb import app
#Runs the built-in webserver.
if __name__ == '__main__':
app.run()
기본 페이지 만들기
기본 페이지는 사용자에게 API의 기능과 사용 방법을 교육합니다. 기본 페이지 만들기를 시작하려면 먼저 몇 가지 템플릿을 만들어야 합니다.
필요한 파일 만들기
"templates"라는 폴더를 만들고 그 안에 "index.html"과 "usage.html"이라는 두 개의 파일을 넣어 시작하겠습니다. 이 파일에 일부 데이터를 넣을 것입니다. 이 페이지는 매우 기본적이므로 원하는 대로 사용자 정의할 수 있습니다.
templates/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Debate API</title>
</head>
<body>
<h1>Welcome to the Debate API!</h1>
<h2>Usage: <a href="/usage">Usage</a></h2>
<h3>Debate of the Day:</h3>
<h2>{{ debateOfTheDay }}</h2>
</body>
</html>
templates/usage.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Debate API Usage</title>
</head>
<body>
<h1>Debate API Usage</h1>
<h2>/api/random</h2>
<p>Gets a random debate topic.<br>Returns:</p>
<code>
{"topic": "[Insert Topic Here]", "id": id}
</code>
<h2>/api/{id}</h2>
<p>Gets a debate topic by ID.<br>Returns:</p>
<code>
{"topic": "[Insert Topic Here]", "id": id}
</code>
<h2>/api/debate-of-the-day</h2>
<p>Gets the debate topic of the day.<br>Returns:</p>
<code>
{"topic": "[Insert Topic Here]", "id": id}
</code>
</body>
</html>
또한 "data"라는 폴더를 만들고 "data.json"이라는 파일을 추가해야 합니다. 또한 일부 상용구 데이터로 채워야 합니다. 우리는 또한 몇 가지 토론 질문을 추가할 것입니다. DebateOfTheDay는 오늘의 토론의 지표가 되어야 합니다.
data/data.json:
{
"topics": [
"Nuclear energy is the best energy.",
"Python is the best programming language.",
"Social media is unhealthy.",
"Apples are the best fruit."
],
"debateOfTheDay": 0
}
기능 라우팅
이제 페이지를 반환하도록 함수를 라우팅해야 합니다.
route
데코레이터를 사용하면 쉽게 할 수 있습니다. 인덱스 페이지에는 오늘의 토론을 검색하기 위한 몇 가지 추가 논리가 있습니다.main.py:
from waffleweb import app
from waffleweb.response import render
import json
@app.route('/')
def index(request):
with open('data/data.json', 'r') as f:
#Gets the data and loads it into a dictionary
data = json.loads(f.read())
#This gets the id of the debate of the day then finds the matching topic
debateOfTheDay = data['topics'][data['debateOfTheDay']]
return render(request, 'index.html', {'debateOfTheDay': debateOfTheDay})
@app.route('/usage')
def usage(request):
return render(request, 'usage.html')
#Runs the built-in webserver.
if __name__ == '__main__':
app.run()
route
데코레이터의 유일한 인수는 해당 페이지에 액세스하기 위한 URL입니다. render
함수는 템플릿을 반환합니다.이제 "main.py"파일을 실행하여 페이지를 테스트할 수 있습니다.
API 생성
사이트의 API 섹션을 생성하려면 일부 기능을 라우팅하기만 하면 됩니다. 임의의 주제에 대한 페이지, 오늘의 토론에 대한 페이지, ID로 주제를 가져오는 페이지 등 세 페이지를 라우팅할 것입니다.
기능 라우팅
함수를 라우팅하기 위해 다시
route
데코레이터를 사용합니다.main.py:
from waffleweb import app
from waffleweb.response import render, JSONResponse
import json
import random
@app.route('/')
def index(request):
with open('data/data.json', 'r') as f:
#Gets the data and loads it into a dictionary
data = json.loads(f.read())
#This gets the id of the debate of the day then finds the matching topic
debateOfTheDay = data['topics'][data['debateOfTheDay']]
return render(request, 'index.html', {'debateOfTheDay': debateOfTheDay})
@app.route('/usage')
def usage(request):
return render(request, 'usage.html')
@app.route('api/random')
def randomTopic(request):
with open('data/data.json', 'r') as f:
#Gets the data and loads it into a dictionary
data = json.loads(f.read())
topics = data["topics"]
randomTopicID = random.randint(0, len(topics))
return JSONResponse(request, {"topic": topics[randomTopicID], "id": randomTopicID})
@app.route('api/debate-of-the-day')
def debateOfTheDay(request):
with open('data/data.json', 'r') as f:
#Gets the data and loads it into a dictionary
data = json.loads(f.read())
#This gets the id of the debate of the day then finds the matching topic
debateOfTheDayID = data['debateOfTheDay']
debateOfTheDay = data['topics'][debateOfTheDayID]
return JSONResponse(request, {"topic": debateOfTheDay, "id": debateOfTheDayID})
@app.route('api/<id:int>')
def getTopicByID(request, id):
with open('data/data.json', 'r') as f:
#Gets the data and loads it into a dictionary
data = json.loads(f.read())
topics = data["topics"]
if type(id) != int:
return JSONResponse(request, {"error": "The ID has to be an int."})
if id < 0 or id >= len(topics):
return JSONResponse(request, {"error": "A topic with that id does not exist."})
return JSONResponse(request, {"topic": data["topics"][id], "id": id})
#Runs the built-in webserver.
if __name__ == '__main__':
app.run()
ID로 주제를 가져오는 경로에서 "
<id:int>
"라는 이상한 텍스트를 발견할 수 있습니다. URL에 변수 부분을 포함할 수 있는 URL 변수입니다. 그런 다음 함수 인수로 변수에 액세스할 수 있습니다.JSONResponse
는 JSON 전용 응답입니다.결론
이 튜토리얼을 읽어주셔서 감사합니다! 이 튜토리얼을 따라 성공하셨기를 바랍니다. 피드백은 대단히 감사합니다!
Reference
이 문제에 관하여(Waffleweb으로 기본 API를 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/berserkware/how-to-create-a-basic-api-with-waffleweb-1jhm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)