API 개발이라고 하면 Django REST Framework, Flask, FastAPI를 떠올릴 수 있습니다. 네, API를 작성하는 데 사용할 수 있습니다. 하지만 오늘 공유하는 프레임워크를 사용하면 기존 기능을 더 빠르게 API로 변환할 수 있습니다. Sanic.
Sanic[1]은 성능 향상을 위해 설계된 Python3.7+ 웹 서버 및 웹 프레임워크입니다. Python 3.5에 추가된 async/await 구문을 사용할 수 있으므로 효과적으로 차단을 방지하고 응답 속도를 향상시킬 수 있습니다. Sanic은 수정 및 확장이 쉬운 HTTP 서비스를 구현하기 위해 생성과 시작을 통합하는 간단하고 빠른 방법을 제공하기 위해 노력하고 있습니다. 수준의 웹 애플리케이션. 현재 Github에는 16.3,000개의 별이 있으며 광범위한 커뮤니티 지원을 받고 있습니다.
다음 기능이 있습니다:
이제 코드를 API로 변환하는 방법을 살펴보겠습니다. function.py에 이미 두 개의 함수가 작성되어 있다고 가정해 보겠습니다.
import datetime def get_datetime(): return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") def sum_x_y(x, y): return x + y
API로 변환하려면 다른 sanic_app.py를 작성하세요.
from sanic import Sanic, json from functions import get_datetime, sum_x_y app = Sanic("CodeToAPI") HOST = "localhost" PORT = 8000 @app.route("/getdatetime") async def getdatetime(request): return json({"now": get_datetime()}) @app.get('/sumxy') async def sumxy(request): parameters = request.args result = sum_x_y(int(parameters['x'][0]), int(parameters['y'][0])) return json({'result': result}) if __name__ == "__main__": app.run(host=HOST, port=PORT, debug=False)
그러면 python sanic_app.py를 실행하여 API 서비스를 시작하려면:
실행 결과에서 우리는 sanic이 이미 프로덕션 환경 모드에서 실행되고 있음을 알 수 있습니다. 이는 기본 제공되는 다른 웹 프레임워크와는 다릅니다. 개발용 서버임을 분명히 하세요. Sanic의 상황은 정반대입니다. 내장 서버는 프로덕션 환경에서 직접 사용할 수 있습니다.
인터페이스 테스트에 컬을 사용할 수 있습니다:
❯ curl "http://localhost:8000/getdatetime" {"now":"2022-07-25 06:34:25"}%❯ curl "http://localhost:8000/sumxy?x=12&y=34" {"result":46}%
post를 사용하고 json을 사용하여 매개변수를 전달하는 경우에도 간단합니다.
@app.post('/sumxy') async def sumxy(request): parameters = request.json print(parameters) result = sum_x_y(int(parameters['x']), int(parameters['y'])) return json({'result': result})
curl은 다음과 같이 테스트됩니다.
❯ curl -X 'POST' 'http://localhost:8000/sumxy' -H "Content-Type: application/json" -d '{"x":10,"y":20}' {"result":30}%
Sanic에 배포됨 ASGI와도 호환되는 자체 서버(대부분 프로덕션을 위해 자체 서버를 가져오는 것이 좋습니다). 이는 선호하는 ASGI 서버를 사용하여 Sanic을 실행할 수 있음을 의미합니다. 현재 Daphne, Uvicorn(FastAPI가 사용하는 것) 및 Hypercorn이라는 세 가지 주류 ASGI 서버가 있습니다.
Gunicorn에도 배포 가능:
gunicorn myapp:app --bind 0.0.0.0:1337 --worker-class sanic.worker.GunicornWorker
정적 파일 처리 및 기록 요청 액세스 로그. 더 나은 성능을 얻으려면 Nginx를 프록시로 사용하고 Nginx가 이러한 방식으로 액세스 로그 및 정적 파일을 처리하도록 할 수 있습니다. Python으로 처리하는 것보다 빠릅니다.
위 내용은 Python 코드를 API로 빠르게 전환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!