Ciao, ti ringrazio! Avevo una mezza idea di farlo ma poi mi impelagavo in un uso un po’ avanzato di SQL alchemy e il focus del corso era FastAPI, quindi ci ho rinunciato, penso che appena avrò tempo farò un focus su sqlalchemy stesso ma per ora non ti so dare una tempistica.
Ottimo avevo in mente di provare Go per fare un api, di recente ne ho provata una con rust che sicuramente è molto molto veloce, ma vorrei provare piu alternative da confrontare
L’importante secondo me è rimanere pragmatici, go è esattamente veloce ma è anche molto semplice nel gestire la parallelizzazione dei processi, poi ha molte librerie per qualsiasi cosa. La scelta della tecnologia è sempre frutto di un compromesso, altrimenti scriveremmo tutti in assembly 😬
Ciao, video molto interessante complimenti. Avrei una domanda, come mai hai creato la classe JWTBearer estendendo la classe HTTPBearer? piu che altro leggendo la documentazione non trovo niente
Ciao! l'ho fatto per poter utilizzare il metodo __call__ dal padre, facendo: credentials: HTTPAuthorizationCredentials = await super().__call__(request) E' un modo elegante per trovarsi già l'oggetto con tutti gli attributi e metodi al loro posto, chiaramente la cosa può essere fatta anche in altri modi. Spero di essere stato d'aiuto!
Segnalo un intoppo banale riscontrato, ma che potrebbe aiutare qualcuno: Facendo il migrate del model con alembic, mi dava errore. Come indicato nel log del terminale, bisogna installare la libreria greenlet. Fatto ciò, ho verificato che effettivamente il problema fosse solo quello e rilanciato il freeze per aggiungere la libreria alla lista requirements.txt.
Grazie per la segnalazione! Superstrano non te lo abbia segnalato come dipendenza, nei miei requirements era comunque presente se guardi la documentazione allegata su github
bello, però bastava creare un main nel quale si settavano tutti i parametri. ma ciò, mi pare di capire, che fastapi-cli non funziona con altri server tipo guvicorn
si, sto finendo di stilare una sorta di scaletta, probabilmente il primo video uscirà già mercoledì oppure nel fine settimana. alla fine ho deciso di usare gin con gorm
Lo usavo, poi sono passato a pdm per alcune noie di standard e l'esportazione di requirement.txt.. e la migrazione è stata indolore (anche se alcuni amici mi segnalavano problemi di installazione pdm su docker).
pdm è un buon progetto però ancora un po’ acerbo secondo me, non sono espertissimo ma credo non gestisca per nulla i venv e questo mi torna estremamente comodo 😅 comunque ci lancio sempre un occhio per vedere se rilasciano cose interessanti
@@HappyBackending PDM gestisce perfettamente i venv, è meno famoso di poetry ma è molto interessante. Me lo hanno consigliato due grandi maintainer di progetti opensource. Quando hai un minuto dagli un occhio.
C'è da dire che al test all'end point "db_json" in Go al minuto 10:30 hai eseguito 100 chiamate invece di 50, davvero impressionante. Potresti confrontarlo anche con node?
Davvero interessante, sei stato una bella scoperta. Gente come te, che diffonde conoscenza alternativa sullo sviluppo di backend (con i giusti razionali) in Italia ce ne vorrebbe a pallettoni. 🙂
il modo che uso io è di prendere un piccolo vps, normalmente qualche euro al mese, tante le risorse che usa sono davvero poche e con un vps minimale ne potresti tenere su diversi contemporaneamente. Non sono sicuro ci sia ancora ma su ovh c’era l’offerta di un vps a 99 centesimi per un anno
@@HappyBackending grazie mille, ora mi informo meglio su cosa è un vps ahah. Poi vedo se riesco a creare il bot per come mi serve e in caso lo metto in 24h! Grazie!
Ciao, come ho già risposto ad un'altro commento, se mi capita si, ho un po di esperienza sia con express ma sopratutto con fastify, però di fare confronti puri e seri non mi va, sopratutto perché è complesso e presuppone un sacco di competenze che io non ho, però se ricapita un'occasione come questa non esiterò dal farlo, perché è comunque divertente
Quando si tratta di fare benchmark, è un'arte complessa che richiede molta attenzione ai dettagli. La mia esperienza è stata un po' grossolana e mirava a verificare un obiettivo specifico. Onestamente, non mi sento abbastanza competente per condurre confronti approfonditi su tutti gli aspetti. Ci sono persone specializzate in questo campo che sono molto bravi. Le performance mi interessano soprattutto dal punto di vista di un backender: ottimizzare strutture, parallelizzare processi. In queste situazioni, affronterò sicuramente la questione. Tuttavia, lasciar fare benchmark agli esperti in questo campo mi sembra la scelta migliore 😬
Mi sono sentito preso in causa 😂 comunque grande per aver approfondito, alla fine penso che il sunto sia “fastapi è lento perché Python è lento, nonostante fastapi ce la metta tutta” ahah
si ma con estremo affetto ❤ come dico anche nel video, è sempre sano mettersi in discussione e hai dato uno spunto molto interessante. Io stesso non mi aspettavo alcune performance, è stato molto utile indagare. p.s. sono piuttosto sicuro di aver commesso un errore nell'ultimo test in go che in teoria è molto più veloce nella risposta di tipo stream, ma rimarrà un nostro piccolo segreto 😶
Ciao! Grazie per questo tes, interessante vedere la community italiana affrontare questi temi. Possiamo provare a collegare entrambi ad un db e fare una query su una tabella con tipo 20 colonne per 1000 righe? sarebbe interessante capire come si comportano entrambi in questo scenario leggermente piu realistico (probabilmente stessi risultati ma almeno si fa il content ahhah)
Ciao! Si ho un po’ raccolto vari suggerimenti e farò una piccola seconda parte con delle varianti. Ti posso già anticipare che python non ne esce benissimo, anche usando dei driver molto performante tipo asyncpg Una prova che farò sicuramente invece è quella di far restituire da db non le row ma direttamente json, in modo da creare meno iterazioni possibili in python. Fra qualche giorno vedremo se FastAPI riuscirà a difendersi in almeno uno dei setup 😅
mah, testare le performance di due web framework dove il bottleneck è un for loop? comparando un linguaggio compilato ad uno interpretato -tra l'altro Python, che è particolarmente lento con i for loop? mi sembra un approccio discutibile
ho detto che il test non fosse perfetto, ma se avessi letto i dati dal disco l’osservazione poteva essere la medesima, per questo ho inserito una variabile in ogni map in ogni caso non sono io che ho fatto il claim sulla velocità di fastapi ❤️
@@HappyBackending eh ok, però anche li, leggi i dati da disco (immagino tu ti stia riferendo a query su un database, da quanto scritto negli altri commenti), ma anche li, stai usando fastapi come orm? 🙂 ogni linea di codice che introduci che non sia legata al web framework in se si porta dietro del "rumore" nella valutazione della performance del web framewrok stesso. Se sqlalchemy è meno performante di un orm in go, paghi il prezzo li, ma non perchè fastapi "abbia performance peggiori nel leggere i dati da disco": fastapi il disco manco lo vede. Poi sul loro claim di performance storgo il naso pure io eh, sia chiaro, e te lo dico pur lavorandoci quotidianamente con fastapi, però non è questo il modo di valutarlo; non è che il test "non sia perfetto", è che proprio non misura quello che vuoi tu. Se al posto del for loop ci mettiamo un job di algebra lineare, e su python mi affido a qualche libreria che wrappa codice C++ ottimizzato, vedi che i risultati che ottieni sono opposti, ma non è che allora "fastapi è più veloce di go".
però a questo punto come faccio a valutarlo? fastapi è l’insieme delle sua componenti: starlette, orjson, uvicorn se faccio il test di risposta secca senza il body sto testando starlette e uvicorn (nel mio caso anche gunucorn) btw se volessi fare una prova con db userei direttamente il driver senza passare dall’orm, quindi asyncpg e pg rimango comunque dell’opinione che vada valutata nel suo complesso, considerando anche e sopratutto i difetti di python perché quei difetti sono direttamente riscontrabili anche nell’uso quotidiano sempre pronto a cambiare idea poi eh 😁
@@HappyBackending si si ma infatti fastapi non è altro che un wrapper su starlette che a sua volta è un wrapper su uncorn. fastapi entra soprattuto in gioco per quanto riguarda cose come gestione del routing, iniezione di dipendenze, validazione del body e/o query parameters ecc, il vero lavoro sporco lo fanno starlette e uvicorn. Non so quale sia il miglior metodo per testare questa cosa, probabilmente quello che involve meno codice "estraneo" a fastapi possibile (anche usare direttamente il driver database è comunque un overhead esterno a fastapi); non so, se proprio non vuoi usare request secca, fare una request con un piccolo body che viene validato da un pydantic model, eventualmente con l'injection di una banalissima funzione, e in response qualcosa come un piccolo json, o una HTMLResponse; oppure servire file statici; evitando bottleneck tipici dei linguaggi stessi (tipo i for loop per python); poi ovvio, hai perfettamente ragione nel dire che in generale un app python non sarà tanto performante quanto un app in go (anche li dipende cosa fai, vedasi appunto job "scientifici"), ma loro alla fine fanno il claim sul web framework, non su un app completa 🙂
ammettendo sia così, ci dovrà pure essere un test nel quale non si faccia doppiare da go come velocità. Comunque ho raccolto qualche info e farò una seconda parte togliendo il più possibile inferenze esterne (tipo cicli for, che voglio dire…). Intuitivamente mi verrebbe da dire che la prova madre sarà la response secca con status code però vediamo.
non so quanta differenza ci possa essere, avendo messo una parte variabile in tutto il corpo, si forza anche go a generare la risposta lì per lì, secondo me il confronto rimane fair ho fatto anche dei test con dati presi dal db e la differenza di prestazioni aumenta ancora di più, che poi è questo uso principale di un’API
@@HappyBackending era proprio quello che intendevo io invece, non so quanto la differenza sia imputabile a FastAPI piuttosto che a Python stesso. Probabilmente sono gli accessi al db di python e le sue funzioni che rallentano piuttosto che il framework
pero a quel punto diventerebbe il test del routing, quindi un test di starlette piuttosto che fastapi 😁 la valutazione su fastapi alla vedo più sull’insieme delle sue componenti
provato no, il primo non lo conosco, il secondo so che è un’ottima piattaforma, però render mi sembrava molto più immediato, alla fine mi interessava passare il concetto del deploy ad ogni modo potrebbe essere interessante approfondire entrambe, grazie del consiglio!
Non ti devi preoccupare per il divagare o per il tempo del video, meglio i video lunghi con argomenti ben spiegati che i video corti che omettono la meta delle cose da sapere.
grazie per i complimenti ❤️ ho sempre il dubbio quando dilungarmi, sembra che più lo faccia, più la gente abbandona il video 😂 credo che noi informatici tutti, tendiamo a trovare la soluzione al problema del momento e poi mollarla lì
ciao! sai se è possibile creare un bot che metta in correlazione la lista utenti di due canali? una cosa tipo "se un utente NON è membro del canale A è automaticamente bannato dal canale B" ti ringrazio anticipatamente della risposta <3
Ciao! Per quanto ne sappia no. Lo trovo anche sensato in ottica di limitazione dello spam. Un bot può al massimo recuperare id di un utente che ha scritto un messaggio ma non può recuperare la lista dei partecipanti ad un gruppo.
Complimenti ...si un po' lungo e mi sono perso ma per fortuna è un video posso rivederlo con calma ... hai uno style interessante e naturale continua così
Buonasera…ho la sensazione di avere a che fare con un corso ben strutturato e completo. E’ vero, si nota un po’ di “sperimentazione”😂, ma i concetti sono esposti in modo molto chiaro e soprattutto ogni cosa è spiegata in modo chiaro ed esaustivo. Bravo!
Grazie mille! Altro che sperimentazione, io stesso provo un senso di imbarazzo a rivedere i miei primi video ma se il contenuto è comunque apprezzato sono felice.
Grazie! Si certo, in cantiere ho quello sulla generazione e gestione dei pulsanti, poi sinceramente non so benissimo cosa trattare, se hai qualche richiesta dimmi pure
Ciao! Vorrei tanto poterlo fare ma ad oggi non mi risulta ci siano servizi che ti permettano di tenere su un bot gratuitamente, se conosci qualche servizio sarebbe molto utile 🙏
Heroku ha un piano gratuito che arriva fino a 1000 ore al mese con un po’ di limitazioni , come il sonno automatico dopo 30 minuti, per un video potrebbe andare.
ah ok, con il sonno volendo ti può usare anche render.com , l’ho trattato nel video di deploy di fastapi, la procedura è praticamente la solita, più semplice perché in fondo lanci solo il main.py senza bisogno di server o altro mi piacerebbe trovare qualche servizio gratuito che non vada in sleep ma comprensibilmente non ne vedo nemmeno uno
hai perfettamente ragione, me lo avevano già fatto notare, purtroppo questi erano i primi video e io cringio al solo pensiero che qualcuno possa guardargli ahahaha in futuro cercherò di essere più attento a questa cosa, ove è possibile
Grazie infinite per questo grande lavoro🙌👏. Ti faccio i complimenti per l'approccio che hai scelto😘. Condivido la tua opinione sulla documentazione della libreria ostica 😣😭🤬e senza questi tuoi video brancolerei ancora nel buio😵. Ho iniziato a farne uno basico e l'ho caricaro su pythonanywhere. Funziona.🎉 Posso chiederti se puoi mostrare come formattare il testo (grassetto, corsivo, link ecc.) del messaggio inviato dal bot? Ti raggiungo su telegram👍
Ciao e grazie! 🙏 Si volevo far uscire un’altro video ma vorrei fare altre ricerche, penso che girerò piuttosto la formattazione del testo che è abbastanza semplice, grazie per il suggerimento! Se ti viene in mente altro non farti dei problemi a scrivere.
@@HappyBackending Sono felicissimo di seguirti. Abbiamo la stessa passione e da quel poco che ho visto dai video, te lo meriti! Se più avanti farai Spring, lo sarò ancora più.
non so come ti sia venuto fuori ma una settimana fa ho cominciato a studiarmelo per conto mio, giusto per farmi un po’ di cultura 😂 in ogni caso non mi sento per nulla ferrato e vorrei evitare di fare video dove spiego le cose che non capisco fino in fondo, però in futuro è possibile grazie per i complimenti 🙏
Corso PAZZESCO, roba molto più curata, precisa e coincisa di tanti corsi che su Udemy costano almeno 20-30 euro. Veramente complimenti per la qualità, non ha nulla da invidiare ai corsi che offrono tanti canali USA. Non vedo l'ora di finire il corso dato che il back-end è una mia passione che a lavoro posso sviuppare solo in parte. P.S. : avrai intenzione in un futuro di usare ance K8S e magari fare il deploy sun un cloud provider?
Ciao, grazie infinite per i complimenti! Scusa se rispondo solo ora ma ero in vacanza, nell'episodio 6 faccio deploy su renderer.com come cloud provider, mi è sembrato il piu semplice fra le alternative e che non richiedesse particolari registrazioni con carte o altro. Comunque viva backend, sempre <3