مقدمه
دانشمندان علم داده نباید تنها به ساختن مدل اکتفا کنند، بلکه باید برای قدم بعدی یعنی گسترش مدل، تلاش کنند. با گسترش مدل میتوان نتایج نهایی را به دیگران (یا کلاینتها) نشان داد.
این گروه از افراد ممکن است کدنویسی را درک نکنند و با مشاهده آن، متوجه کدها نشوند. آنها ترجیح میدهند اپلیکیشن نهایی را در پایان ببینند.
هم رویش منتشر کرده است:
آموزش NumPy --- دانشمند داده شوید!
در راستای همین موضوع، آنها میتوانند فوراً نتایج را مشاهده کنند. رویکرد رایجی که وجود دارد، این است که کدهای خود را در یک Rest API قرار دهید و آنها را به عنوان یک میکروسرویس گسترش دهید.
در این مقاله، به معرفی دو فریمورک مختلف میپردازیم. این دو میتوانند به سرعت وب سرورها را راهاندازی کنند.
فریمورکهای Flask و FastAPI
Flask و FastAPI فریمورکهایی هستند که برای ساختن وبسایتها و اپلیکیشنها در مقیاس کوچک استفاده میشوند.
فریمورک Flask
Flask در سال 2010 منتشر شد. یک میکرو فریمورک وب، که به زبان پایتون نوشته شده است. فلسک از ایجاد اپلیکیشنهای وب با حداقل مقدار کد، پشتیبانی میکند.
این فریمورک به گونهای طراحی شده است که به عنوان یک میکروسرویس ویژگیهایی مانند راه اندازی آسان، انعطافپذیری و سرعت بالا در هنگام گسترش آن، داشته باشد. فلسک بر روی WSGI (رابط گذرگاه وب سرور پایتون) ساخته شده است. به موجب آن، سرور برای هر درخواست، یک عامل را در اختیار آن قرار میدهد.
پیش از این آموزش پروژه محور flask در همرویش منتشر شده است. پیشنهاد میکنم فیلم معرفی این آموزش را در زیر ببینید:
برای دریافت بسته کامل آموزش پروژه محور Flask کلیک کنید(+).
مثال زیر نمونهای از برنامهای است که با استفاده از فریمورک Flask نوشته شده است ( نمونهای از استفاده متد (GET) برای دریافت ورودیهای کاربر و درج مقادیر در Google Big Query است. این مثال در Google Cloud Run انتشار یافته است).
from flask import Flask, request, make_response, jsonify
import pandas as pd
import gcsfs
from google.cloud import bigquery
from google.oauth2 import service_account
import pandas_gbq
import os
app = Flask(__name__)
app.config["DEBUG"] = True #If the code is malformed, there will be an error shown when visit app
@app.route("/books", methods=["GET"])
def books_table_update():
Title = request.args.get('title', None)
Author = request.args.get('author', None)
input_table = {'book_title':[Title],'book_author':[Author]}
input_table = pd.DataFrame(input_table)
input_table["book_title"]= input_table["book_title"].map(str)
input_table["book_author"]= input_table["book_author"].map(str)
#Push table to Google Big Query
client = bigquery.Client()
project_id = 'sue-gcp-learning-env'
table_id = 'Books.books_title_author'
pandas_gbq.to_gbq(input_table, table_id, project_id=project_id, if_exists='append')
return "Table books_title_author has been Updated"
پس از اتمام انتشار با Flask، میتوانید URL را اجرا کنید. ورودی را در URL ارسال کنید و سپس یک پیام بازگردانده میشود.
فریمورک FastAPI
FastAPI در مقایسه با Flask جدیدتر است و در سال 2018 منتشر شد. این فریمورک مانند Flask کار میکند. همچنین از توسعه اپلیکیشنهای وب با حداقل مقدار کد پشتیبانی میکند.
با این حال FastAPI در مقایسه با Flask سریعتر است. زیرا بر روی ASGI (Asynchronous Server Gateway Interface) ساخته شده است؛ که به موجب آن از کدهای همروند یا ناهمروند پشتیبانی میکند. این کار با اعلان نقاط پایانی (end points) با سینتکس async def انجام میشود.
هم رویش منتشر کرده است:
آموزش FastAPI در ۱۱۰ دقیقه -- شروع سریع
ویژگی که FastAPI را برجسته میکند، مستندات است. به محض انتشار با استفاده از فریمورک FastAPI ، مستندات ایجاد خواهند شد. همچنین یک رابط کاربری گرافیکی تعاملی (Swagger UI) ایجاد میکند که به وسیله آن، توسعهدهندگان میتوانند نقاط پایانی (End pointهای) API را راحتتر تست کنند.
مثال زیر نمونهای از انتشار برنامهای با استفاده از FastAPI است ( نمونهای از استفاده از متد (GET) برای دریافت ورودیهای کاربر و درج مقادیر در Google Big Query است. این مثال در Google Cloud Run انتشار یافته است).
import uvicorn
from fastapi import FastAPI
import pandas as pd
import gcsfs
from google.cloud import bigquery
from google.oauth2 import service_account
import pandas_gbq
import os
app = FastAPI()
@app.get("/books_title/{book_title}/author/{author}")
async def books_table_update(books_title: str, author: str ):
Title = books_title
Author = author
input_table = {'book_title':[Title],'book_author':[Author]}
input_table = pd.DataFrame(input_table)
input_table["book_title"]= input_table["book_title"].map(str)
input_table["book_author"]= input_table["book_author"].map(str)
#Push table to Google Big Query
client = bigquery.Client()
project_id = 'sue-gcp-learning-env'
table_id = 'Books.books_title_author'
pandas_gbq.to_gbq(input_table, table_id, project_id=project_id, if_exists='replace')
return "Table books_title_author has been Updated"
پس از اتمام انتشار با FastAPI، میتوانید URL را اجرا کنید. ورودی را به URL ارسال کنید. سپس پیامی بازگردانده میشود که مشابه با Flask عمل میکند.
قابلیت اضافی که باعث علاقه توسعهدهندگان به فریمورک FastAPI شده است؛ ایجاد داکیومنتها به صورت خودکار است Swagger UI)). برای دسترسی به Swagger UI ،API endpoint /docsرا بنویسید و وارد آن شوید. در واقع یک GUI تعاملی برای آزمایش نقاط پایانی API است. با وجود UI Swagger، میتوانید برنامه خود را برای دیگران نیز آسانتر توضیح دهید.
با استفاده از Swagger UI، میتوانید به راحتی نقاط پایانی API خود را تست کنید. همچنین پارامترها را از طریق اینترفیس مشخص کنید. به عنوان مثال، در تصویر زیر به راحتی میتوانید «عنوان کتاب» و «نویسنده» را در ستون ارائه شده، مشخص کنید.
به غیر از Swagger UI ،FastAPI با اسناد دیگری مانند “ReDoc” نیز ارائه میشود. این مستندات شامل تمام نقاط پایانی فهرست شده است. این ویژگی، در صورت وجود نقاط پایانی بسیاری در یک سرویس مشابه مفید است. برای دسترسی به صفحه مستندات، API endpoint /redoc را وارد کنید.
مقایسه Flask و FastAPI
متدهای HTTP:
- تعیین متد ” ” GET یا ” ” POST در Flask و FastAPI متفاوت است.
ارسال پارامترها و اعتبارسنجی دادهها:
- Flask برای دادهها اعتبارسنجی ارائه نمیدهد. به این معنی که کاربر میتواند هر نوع دادهای مانند رشته یا عدد صحیح و غیره را ارسال کند (در عوض یک اسکریپت اعتبارسنجی، بر روی دادههای ورودی دریافتی میتواند در اسکریپت ساخته شود. اما به طبع برای این کار به تلاش بیشتری نیاز است).
- FastAPI به توسعهدهندگان اجازه میدهد تا معیار و اعتبارسنجیهای اضافی را بر روی پارامتر دریافتی، شناسایی کنند.
نمایش پیغامهای خطا:
نمایش پیغامهای خطا در Flask به طور پیشفرض، صفحات HTML هستند. اما در FastAPI پیامهای خطای نمایش داده شده با فرمت JSON هستند.
تسکهای ناهمزمان (Asynchronous Tasks):
فلسک از عوامل ناهمروند پشتیبانی نمیکند. این در صورتی است که FastAPI از تسکهای همروند پشتیبانی میکند.
نتیجه:
پس از بررسی و آشنایی با Flask و FastAPI، شاید انتخابتان به FastAPI تغییر کند. زیرا توابعی که این فریمورک ارائه میدهد، بهگونهای غیرهمزمان اجرا میشوند. همچنین ویژگی ایجاد داکیومنتهای دقیق و کامل به صورت خودکار را دارد.
نکتهای را هم که باید در نظر داشته باشید این است که زحمت و تلاش مورد نیاز برای گسترش با استفاده از FastAPI مانند Flask است.
اگر همیشه از Flask استفاده میکنید، میتوانید FastAPI را نیز امتحان کنید و تفاوت میان آنها را درک کنید.
ممنون که تا انتهای مقاله با ما همراه بودید. سوال؟
در مجله همرویش بیشتر پیگیر چه مقالههایی هستید؟ آیا این مقاله برای شما مفید بود؟ نظرات و پیشنهادات خود را در جهت رشد همرویش و خودتان در قسمت نظرات این مقاله با ما به اشتراک بگذارید.
کلیدواژگان
مقایسه Flask و FastAPI | تفاوت Flask با FastAPI | فریمورک FastAPI | مقایسه فریمورک Flask و FastAPI | فلسک یا فست ای پی آی
منبع
Understanding Flask vs FastAPI Web Framework