Semasa carian berkaitan saya, saya dapati bahawa walaupun pada tahun 2024, sebilangan besar orang masih mengesyorkan Flask sebagai rangka kerja web Python. Walau bagaimanapun, pada pandangan saya, "Flask sedang dalam perjalanan keluar, dan FastAPI mewakili masa depan." Itulah sebabnya saya menulis artikel ini. Saya mengalu-alukan semua orang untuk menyertai perbincangan dan menawarkan hujah balas.
Flask memegang tempat yang penting di hati pembangun Python. Jika anda seorang pembangun web, saya yakin anda berkemungkinan besar menggunakan Flask, tetapi mungkin anda tidak pernah mencuba FastAPI.
Berikut adalah dua bukti:
Sekarang mari kita lihat perubahan dalam perkadaran rangka kerja web dalam tinjauan rasmi pembangun Python.
Ternyata pada 2019, FastAPI tidak disenaraikan sebagai pilihan, namun menjelang 2023, bahagiannya telah mencapai 25%. (Pada masa ini, kami hanya mempunyai data sehingga 2023.)
Perlu diambil perhatian bahawa data perkadaran ini merangkumi sistem sedia ada, jadi perkadaran Django dan Flask tidak akan menurun dengan cepat. Namun begitu, trendnya jelas.
Kita semua tahu bahawa medan rangka kerja web sangat prolifik, dengan rangka kerja baharu muncul hampir setiap tahun. Kebanyakan rangka kerja ini adalah jangka pendek, manakala sesetengahnya berjaya bertahan. FastAPI dilahirkan pada penghujung 2018 dan mula mencipta nama sekitar penghujung 2019. Jadi, bagaimanakah ia boleh mengatasi Flask, yang dilahirkan pada penghujung 2010, dari segi populariti dalam tempoh lima tahun sahaja? Seterusnya, mari kita jejaki sejarah pembangunan rangka kerja web Python dan penyelesaian berkaitan sepanjang garis masa untuk pemahaman yang lebih baik.
Pengarang FastAPI ialah pembangun yang sangat memperhatikan pembangunan ekosistem Python. Pautan bacaan lanjutan 2 ialah "Alternatif, Inspirasi dan Perbandingan" yang ditulis oleh pengarang (https://fastapi.tiangolo.com/alternatives/), yang menghuraikan secara terperinci tentang rujukan atau inspirasi yang telah diambil oleh FastAPI daripada pelbagai perpustakaan. Bahagian sejarah pembangunan artikel ini juga merujuk kepada bahagian ini. Saya akan mengesyorkan membaca teks asal, kerana ia mengandungi rasional di sebalik kemunculan FastAPI serta beberapa konsep reka bentuk pengarang.
Flask ialah rangka kerja "mikro", yang berbeza daripada Django. Ia hanya mengekalkan segelintir fungsi teras dan, untuk memisahkan, membahagikan fungsi lain kepada beberapa perpustakaan (seperti Jinja2, Werkzeug, dll.). Ini memberi pembangun kebebasan yang mencukupi dan membolehkan mereka menulis pemalam pihak ketiga dengan mudah untuk fungsi yang berkaitan. Reka bentuk dalamannya seperti cetak biru, konteks dan penghias untuk mewakili laluan, isyarat, dsb. agak maju pada masa itu. Ditambah dengan dokumentasi yang komprehensif, ia sangat mesra pemula.
Berkat kesederhanaannya, Flask sangat sesuai untuk membina API. Walau bagaimanapun, memandangkan Flask sendiri tidak disertakan dengan sebarang fungsi terbina dalam, kami memerlukan rangka kerja REST khusus. Akibatnya, rangka kerja seperti flask-restful, Flask-RESTPlus dan flask-api telah muncul satu demi satu. Selain itu, dalam perkhidmatan REST, terdapat keperluan untuk pengesahan, penghuraian dan spesifikasi data, yang membawa kepada kemunculan Marshmallow, Webargs dan APISpec, sehingga Flask-apispec datang bersama-sama. Walau bagaimanapun, sepanjang proses pembangunan ini, Rangka Kerja Flask REST yang setanding dengan DRF tidak pernah menjadi kenyataan.
Pada peringkat ini, kelemahan Flask secara beransur-ansur kelihatan.
Kekuatan asal Flask terletak pada fleksibiliti dan minimalismenya, tetapi ini juga bermakna bahawa sejumlah besar komponen perlu dibangunkan secara dalaman. Ini sama ada menuntut syarikat besar dengan pembangun yang berdedikasi untuk pembangunan dan penyelenggaraan atau pembangun individu yang sangat berkebolehan. Jika tidak, pemalam adalah sukar untuk mencapai kualiti pengeluaran, mengakibatkan beg bercampur pemalam pihak ketiga untuk Flask, tanpa jaminan penyelenggaraan jangka panjang. Seperti yang dinyatakan sebelum ini, banyak perpustakaan tersebut telah tidak lagi diselenggara.
Jadi, sehingga hari ini, jika anda ingin membina perkhidmatan API dengan Flask, anda masih perlu menggabungkan pelbagai komponen. Untuk beberapa komponen yang belum dikemas kini dengan segera, anda perlu menyelesaikan masalah sendiri. Veteran mungkin boleh mengendalikannya, tetapi bagi pemula, ia agak menakutkan, terutamanya apabila mereka ingin menerapkan amalan dan konsep terkini.
Sejak Python 3.5, asyncio telah menjadi trend masa hadapan. Akibatnya, beberapa rangka kerja web yang menyokong asyncio secara asli telah muncul, seperti aiohttp, Starlette dan sanic.
Pada masa ini, Flask enggan menyesuaikan diri. Komuniti lambat menambah sokongan untuk asyncio, dan pengarang asal Flask telah beralih kepada menulis Rust, meninggalkan projek itu di tangan dua penyelenggara (kini hanya tinggal satu).
Projek untuk membina perkhidmatan API, seperti apistar dan lebur, semuanya telah memberikan inspirasi reka bentuk untuk kelahiran FastAPI.
Kemudian, FastAPI dilahirkan. Penulis pada asalnya mencari penyelesaian yang baik, tetapi situasi di atas masing-masing mempunyai masalah atau batasannya sendiri. Jadi, penulis mencipta rangka kerja baharu ini.
Ini adalah bahagian teras artikel. Sebab berikut adalah tepat mengapa FastAPI boleh menggantikan Flask.
Dalam proses pembangunan API, pengesahan format data, penghuraian dan siri adalah operasi rutin. Selama bertahun-tahun, pelbagai penyelesaian telah muncul, dan pada masa ini, Pydantic ialah pilihan utama:
from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): name: str description: str | None = None price: float tax: float | None = None app = FastAPI() @app.post("/items/") async def create_item(item: Item): return item
Pada pandangan pertama, kod ini mungkin kelihatan seperti cara menulis ORM atau kelas data, tetapi sebenarnya, ia menggunakan sintaks Petua Jenis asli Python untuk menganotasi jenis medan. Sebagai contoh, dalam contoh di atas, skema Item dalam permintaan /item/ telah ditakrifkan dengan jelas dan jenis nilai setiap medan adalah eksplisit. Berbanding dengan kaedah lama menggunakan penerangan skema atau pengekodan keras, pendekatan ini lebih ringkas, lebih sesuai dengan gaya Python dan mempunyai sokongan IDE yang lebih baik.
Pada masa ini, Pydantic mendominasi bidang pengesahan data pengguna. Memandangkan FastAPI mempunyainya terbina dalam, proses pengesahan sangat dipermudahkan dan ralat dikurangkan. Itulah sebabnya laman web rasmi FastAPI menyebut bahawa penyelesaian ini boleh mengurangkan ralat pembangun sehingga 40%. Untuk bahasa dinamik seperti Python, menggunakan Pydantic adalah penting jika anda tidak menggunakan mypy untuk semakan jenis.
Selain itu, terima kasih kepada penyepaduan Pydantic, menambahkan ORM (seperti SQLAlchemy) pada projek menjadi sangat mudah. Objek yang diperoleh daripada permintaan boleh dihantar terus ke pangkalan data kerana pengesahan data telah pun selesai. Sebaliknya, objek yang diambil daripada pangkalan data juga boleh dipulangkan terus.
Sebaliknya, Flask kekurangan dalam hal ini.
Dalam era Flask, pelaksanaan kod adalah satu-benang dan segerak. Ini bermakna permintaan perlu diproses satu demi satu, dan permintaan lain akan membuang masa menunggu operasi I/O sebelum yang sebelumnya selesai. Asyncio, sebaliknya, adalah penyelesaian yang optimum. Ia boleh menjadikan operasi I/O tidak segerak, membolehkan anda memperoleh hasil tugasan tanpa menunggu tugasan selesai, dan kemudian meneruskan untuk mengendalikan permintaan tugasan lain.
FastAPI secara asli menyokong kod serentak dan tak segerak. Selagi kod ditulis dengan betul, ia boleh mencapai kecekapan puncak. Oleh itu, ia dianggap sebagai rangka kerja Python terpantas pada masa ini, dengan kecekapan yang serupa dengan NodeJS atau Go. Apabila kelajuan dan prestasi adalah penting, FastAPI sudah pasti pilihan terbaik.
Mari kita sebutkan WSGI dahulu. Nama penuhnya ialah "Antara Muka Gerbang Pelayan Web Python", yang boleh dirujuk dalam "PEP 3333" (https://peps.python.org/pep-3333/). Ia adalah standard Python yang ditulis khusus untuk interaksi antara aplikasi web dan pelayan. Jika anda telah menggunakan PHP atau Ruby, anda mungkin lebih mudah untuk memahaminya. Flask bergantung pada Werkzeug, iaitu suite WSGI, jadi Flask menyokong standard WSGI lama ini dan bukan ASGI.
Masalah dengan WSGI ialah ia tidak dapat memanfaatkan tak segerak untuk meningkatkan prestasi dan kecekapan. Jadi, saluran Django mempelopori ASGI. Nama penuhnya ialah "Antara Muka Gerbang Pelayan Asynchronous", yang merupakan standard berulang dan direka bentuk semula sepenuhnya. Ia menyediakan antara muka pelayan/aplikasi tak segerak dan menyokong HTTP, HTTP/2 dan WebSocket. Tidak seperti WSGI, ASGI membenarkan setiap aplikasi mempunyai berbilang peristiwa tak segerak. Selain itu, ASGI menyokong kedua-dua aplikasi segerak dan tak segerak. Anda boleh sama ada memindahkan aplikasi web WSGI segerak lama ke ASGI atau menggunakan ASGI untuk membina aplikasi web tak segerak baharu.
Sebelum membuat kesimpulan, mari tambah penjelasan lima istilah:
Pada masa lalu, penyelesaian persekitaran pengeluaran untuk WSGI biasanya Nginx Gunicorn Flask(Django), manakala pada masa kini, penyelesaian persekitaran pengeluaran untuk ASGI ialah Nginx Uvicorn FastAPI.
Satu perkara lagi. Berdasarkan nama dan pengenalan FastAPI, jelas sekali ia direka untuk membina perkhidmatan API. Malah, kod terasnya betul-betul seperti itu. Boleh dikatakan bahawa ia bukan rangka kerja tradisional yang dilaksanakan sepenuhnya tetapi lebih kepada rangka kerja yang menggabungkan kekuatan pelbagai rangka kerja. Bermula dari cangkang kosong, ia memasang komponen yang diperlukan dan sesuai. Sebagai contoh, ia tidak mempunyai enjin templat. Jika anda benar-benar perlu menggunakannya untuk membina aplikasi web yang memerlukan pemaparan templat, anda boleh memilih dan menggabungkan enjin templat yang anda perlukan. Sudah tentu, anda juga boleh menggunakan Jinja2 terbina dalam Starlette (ya, ia juga terbina dalam Flask).
Kelebihan FastAPI yang dinyatakan di atas tidak mencukupi untuk membuat kesimpulan bahawa Flask sudah mati. Jadi, mengapa saya memegang pandangan ini? Ia terutamanya disebabkan oleh populariti di kalangan pembangun dan pengguna.
"populariti" di sini agak subjektif. Penunjuk yang boleh saya fikirkan adalah seperti berikut:
Semua situasi ini, pada pendapat saya, mencadangkan bahawa zaman kegemilangan Flask telah berlalu dan FastAPI ialah bintang yang semakin meningkat.
Akhir sekali, izinkan saya memperkenalkan platform yang ideal untuk menggunakan Flask/FastAPI: Leapcell.
Leapcell ialah platform pengkomputeran awan yang direka khusus untuk aplikasi pengedaran moden. Model penetapan harga bayar semasa anda memastikan tiada kos terbiar, bermakna pengguna hanya membayar untuk sumber yang sebenarnya mereka gunakan.
Kelebihan unik Leapcell untuk aplikasi WSGI/ASGI:
Ketahui lebih lanjut dalam dokumentasi!
Twitter Leapcell: https://x.com/LeapcellHQ
Atas ialah kandungan terperinci Adakah Flask Mati? Adakah FastAPI Masa Depan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!