These are good answers but nowadays we would be remiss not to mention so-called "serverless" frameworks. Dropwizard et al are good suggestions for running your own instance, but more and more the serverless approach is an attractive alternative to implementing a web app.
AWS Lambda now supports Java, so perhaps we could consider API Gateway, Cognito and DynamoDB/Aurora as one of the new "frameworks". Google has their own competing offering as well, e.g. Cloud Functions. Firebase deserves a special mention as a rapid development framework, although at the moment it only supports Node.js. Like many frameworks it has pros and cons, but in my opinion full-on websockets support OOTB is a pretty cool pro.. especially since Lambda/Cloud Functions/FaaS can't do websockets on their own.
my go to is java/Scala/kotlin in the backend (Spring Boot when appropriate). Angular 6 with typescript on the frontend. Stack is stateless, immutable (no ssh keys or any secrets, only IAM roles). Lambda, API Gateway and DynamoDB with on demand billing. Costs pennies when idle and can auto scale fast to millions of requests. Static files on S3. Automatic CI/CD with Code*. All the infrastructure is in code as well. AppSync for WebSockets and GraphQL. (Recently started using Amplify as well)
It's telling that almost all these comments recommend things that aren't JavaScript web frameworks. This has been my experience too, you want to avoid that ecosystem. For this reason in particular:
> language/platform/dependencies updates are infrequent, easy to do, unlikely to break the app;
I'll second the Django, Rails, Laravel, but also add something statically typed like Java with Spring if this is purely an API backend. Static types will give you peace of mind during runtime for years.
Stick to relational databases. Don't buy into hype stuff on Medium blogs. You can go a long way on a VPS with an LTS distro on auto-update (very few SaaS businesses actually have scale that exceeds what a modern VPS can do).
My primary background is in desktop development and my knowledge of web development is a little rusty by now. I know about Node.JS, Angular, React, Express and the like and have done a few small projects with these technologies. So far, I have implemented the below requirements for each project myself or copied them from previous projects. Now I am looking for a reasonable fullstack framework with the following requirements:
- A central definition of data schemas. I don't want to define my schema or validation twice, once in the frontend and once in the backend.
- Automatic generation of REST endpoints. I hate boilerplate code and don't want to reimplement Get/GetOne/Add/Update/Delete and Websocket for each data model. Even better would be a GraphQL interface.
- Authorization and Authentication
- No manual HTTP calls for standard cases. I want to define my model at the server and have the data available in an array at the client. As soon as a client inserts a record in his list I want that automatically a POST with the new record is sent to the server, it verifies the model and the authorization and inserts the record into the database. Then the server notifies the other clients about the change using websockets. The other clients see the new data record in their array without having to write a single manual HTTP call or websocket connection.
- Open Source Only. No Firebase or similar.
I've been searching for a while, but haven't found anything that seems reasonable. If I don't find anything I will write a small framework myself. I apologize if I seem lazy and don't want to search myself, but I'm really getting desperate. I want to spend as little time as possible on writing boilerplate and instead write business logic. There are thousands of javascript frameworks out there but none of them seem to handle these simple standard cases very well. They all require manual implementation of CRUD for each model or manual data fetching and subscription. Please make suggestions for frameworks and help me to see through the framework jungle!
Vapor[0] based on Swift. Advantage of this is that you don't have to evaluate multiple frameworks for Swift and suffer paralysis by analysis. All the Swift community is behind one framework.
The next is Actix[1] based on Rust. There are many frameworks in Rust and most of them have not reached 1.0 And which framework will survive becomes a question.
Other not so well-known is Wt[2] based on C++. This actually is created for programmers who are not web developers. The development experience is similar to desktop app development like Qt.
If that is not acceptable then Django[3], based on Python, is the one that will be good for you.
For the front-end I would recommend Flutter[4]. As much as I dislike getting tied to a single company for whom the framework is not their bread-and-butter, I don't see any other viable options to Flutter that will cover all web, mobile and desktop out of the box.
For databases, I would recommend BedrockDB[5], if you are not averse to SQLite. Or FoundationDB[6], if you want NoSQL. But if you are not concerned about horizontal scalability or okay with self-managing database availability, then PostgreSQL[7] is a very good option.
For push notifications, PushPin[8] is a good option.
Use whatever you know best. I'd use firebase and google cloud stuff because I know how to get something working with them quickly. My personal stack would be: Firebase for storage, cloud functions with python if logic was simple and mostly client side, Flask in a VM if I thought it would need more complicated stuff (like image processing) on the server side. Bootstrap and Angular for the front end. But there's no strong reason for those other then these are proven, I know them already, there are plenty of equivalent options.
Recently I've been playing with Blazor+WASM and that's looking really promising and allows sharing C# code between client and server (and potentially a native desktop app as well), and to me is more ergonomic to program in, but I haven't used it for anything non-trivial yet.
This is something that I've been pondering since reviewing the number of languages and frameworks I sampled in 2018. Time to pick winners.
Back-end:
- backendless if possible (e.g. use GraphQL, Firebase, etc)
- minimal (1:1 with document store):
PostgreSQL/JSONB, FoundationDB, MongoDB, RethinkDB, CouchDB(mobile-sync)
- relational: PostgreSQL(master/replica), MySQL(multi-master), CockroachDB/TiDB (sharded)
languages: Elixir(Phoenix), Kotlin/Java(Javalin), Clojure(Liberator), Go, Kemal(Crystal)
Front-end:
- HTML+JS using Phoenix/LiveView (or Vaadin?)
- Vue.js (possibly Elm) for SPA
Runners-up:
Spring - slow startup, JPA/Hibernate quirks, latency spikes (gc? of JPA/Hibernate)
Micronaut - could be the next big thing (too much like Spring, learning curve)
Ktor - coroutine support potential interesting, prefer a Kotlin+Java ecosystem
SparkJava - too bare (used with Sql2o), Javalin is a spiritual successor
DropWizard - older, poor documentation. But JDBI is sweet to use with other microframeworks
Amber (Crystal) - Kemal has a much faster edit/compile/run cycle
Rails/Sinatra/Web2py/Django/Flask/etc - prefer static typing and faster/smaller runtime
This is obviously still too long a list. Continue testing and culling.
For full stack opinionated frameworks, there are a few like Laravel (PHP), Django (Python), Rails (Ruby), Phoenix (Elixir). They all come with batteries included for the most part. Then there is node/expressjs ecosystem if you are into that.
Then you have micro backend frameworks like lumen (PHP), Flask (Python), Sinatra (Ruby) which can be used to build APIs etc.
For front end javascript, you have react, vuejs and angular as the top 3. You also have elm (compiles to js) and then some other players like mithril etc. Good old jquery is still out there.
For more realtime stuff, you can use websockets (socket.io library etc), google firebase, pusher etc
Haha, it's funny that I wasn't the only one who had the same idea. Here's the answer I got:
> One framework that meets your requirements is NestJS. NestJS is a full-stack web development framework for Node.js that is built on top of TypeScript. It provides a central definition of data schemas, automatic generation of REST endpoints, and support for GraphQL. NestJS also includes built-in support for authorization and authentication, and it provides a reactive programming model that simplifies the process of managing data and communication between the client and the server. NestJS is open-source and is designed to be easy to use and extend. It allows you to define your data models on the server and have them automatically synchronized with the client, so that you don't have to write manual HTTP calls or manage websocket connections. NestJS may be a good fit for your needs because it provides many of the features that you are looking for in a full-stack framework.
The answer is use whatever language/framework you know best. Know PHP? Use Laravel. Know Python? Use Django.
For me, I am mainly a Javascript developer so I use AWS + Next.js. It's very easy to create an API with Serverless, hook up a DynamoDB table, maybe add some Cognito in there, etc. All just Javascript. You can deploy the Next.js site to S3.
Obviously, this means a ton of external dependencies, but if you want something easily it I think it works well.
Out of curiosity, I just checked out Scalatra: looks like a good framework for simple RESTful web apps and to implement web services. Thanks for the reference.
Google Cloud and Firebase. Free tiers available for experimenting ;)
Caddy is very versatile as web server, proxy, load balancer, etc. And plays well with gRPC.
For middleware, golang is enough. Gorilla and go-kit add useful helpers.
As far as frontend, I've used Bootstrap, Foundation, etc. But prefer building custom solutions with things like D3.JS and Babylon.JS. Stripe Elements is also really nice.
Just my humble opinion, from what I've seen recently:
a) NodeJS microservices - seem to be preferred for most applications because they are so efficient and simple to maintain; single threaded and async, so it's very different from Scala. Also the ecosystem is progressing very quickly, NPM, etc.
b) THRIFT - REST has an alternative, and it's really interesting to see Websockets, and binary encoding/decoding using THRIFT protocol, but not as simple as HTTP/REST in practice
c) Cassandra - easily scalable and good enough for most simple features, has it's drawbacks as well; good for what could become gigantic operations
For the frontend use whatever you are familiar with as that will keep your velocity higher and your tech debt lower at first. If you use a new framework, you'll slow yourself down and pile on preventable tech debt because you'll do stuff that isn't quite correct in the new framework until you master it.
As for backend. Firebase is easy to use and quick to get started with. That said, it can get expensive pretty fast and I am not a fan of the lock-in it comes with it. I fully admit I prefer AWS over Google, although we use both today. However, even with AWS I avoid DynamoDB and vendor specific tooling that I couldn't run on a box myself. I'll use RDS for Postgres but that's because I can always move that to my own servers if the need arose. If I was using Dynamo that'd be tough. I'll use their API compliant tooling like MQ or their Mongo compatible document store if I wanted, because again I can move databases without changing code.
I want to start a hobby project which needs to have as less development time as possible. I would want social media login (sign up via email, fb, google accounts, etc.), user management, connecting to a posgres (or even sqlite) db, deployments (perhaps to a paas like cloudrun, heroku, aws beanstalk etc.), db migrations etc. all already automated. If there is some automation for the API body and parameter validation from a openapi spec that would be even better.
I just want to write the core business logic for the API handlers and leave everything else to the framework. I do not mind (and actually would prefer) if the framework is opinionated and works well for its intended goals.
I prefer Typescript/JS, Golang, Kotlin in that order. If no other option, then python3 would be an acceptable choice.
Any recommendations ?
tldr: I want a batteries-included API framework with users management, session management, db management, openapi integration. Help ?
It supports the multiple databases. meanja and meteorjs are supported only mongodb.
Websocket and http-request(express) can be used in same time.
It is not new framework. It built top of the well defined frameworks( Anjularjs, Socket-io, express, nodejs ).
AWS Lambda now supports Java, so perhaps we could consider API Gateway, Cognito and DynamoDB/Aurora as one of the new "frameworks". Google has their own competing offering as well, e.g. Cloud Functions. Firebase deserves a special mention as a rapid development framework, although at the moment it only supports Node.js. Like many frameworks it has pros and cons, but in my opinion full-on websockets support OOTB is a pretty cool pro.. especially since Lambda/Cloud Functions/FaaS can't do websockets on their own.
reply