Yeah, this is very cool, and I’m surprised I hadn’t heard about it. Though I think we’re finally at the point where async python web frameworks and tools are great, to the point where I’m no longer jonesing for something better like I used to, both in terms of performance and usability.<p>Yeah, aiohttp was where it all really began, and sanic is nice for recovering Flask users, but if you really want to see performance and momentum, check out Starlette (<a href="https://www.starlette.io" rel="nofollow">https://www.starlette.io</a>) and FastAPI (<a href="https://fastapi.tiangolo.com" rel="nofollow">https://fastapi.tiangolo.com</a>) which is built on top of Starlette and is very clever and probably the most rapid way to build an API that I’ve ever seen. In most practical tests Starlette also outperforms aiohttp/etc. by a factor of 5, and the ASGI spec it’s built on is the actual successor to WGSI and the future of python web programming.<p>Things have come a very long way the last handful of years, and there are many great options. Nice to see yet another one.
Why do project like this spawn in hordes? I don’t ask it to criticize kore4 in any way, let me explain.<p>Every new framework for web does almost the same thing in slightly different way: serve http routes by assigning functions to it and inserting some middleware to check/replace something in the request. But why is it important at all? Why don’t we see numerous both-side frameworks which make http (rest, ws, etc) completely transparent?<p>As a long-time desktop dev I would like to use an object lib, which would take the burden of api and provide clean interfaces between client/server/db. Like this pseudocode:<p><pre><code> # backend
@net()
@db()
class Car:
members
methods
Car.export(some_members)
Car.export(some_methods)
// front
let edit = await db.edit()
let car = edit.new(db.Car)
car.year = 2013
car.pic = await edit.upload(some_pic, progress_handler)
car.vendor = db.Vendor.find({
title:’Ford’})
...
await edit.save()
// or edit.cancel()
// which also removes pic
// eventually
let car = db.Car.find({year:2013})
car.drive_to(some_loc)
# car drives to some_loc in backend
# Your taxi app prototype
# almost done here
</code></pre>
Instead we happily define routes in yet another way, which feels like when I was in a school writing masm 100-liners to open a file and print its contents. Am I missing something?<p>I know about vaadin and outsystems, but these are enterprise behemots, one paid, one too complex* and opinionated to begin with. Why not npm install dbnetlib, app.use(dbnetlib()) and go create?<p>* a good sign that you’ll have to jump through hoops on non-standard tasks.
For people interested in a high-performance Python asyncio web server, sanic (<a href="https://github.com/huge-success/sanic" rel="nofollow">https://github.com/huge-success/sanic</a>) is also worth evaluating.