I recently published an alpha version of a code generation tool,
DBCore, that reads a database
schema from PostgreSQL or MySQL and generates an entire Go API with
CRUD operations, pagination, filtering, and authentication.
But more than just generating code like
xo/xo or gnorm,
DBCore defines a standard REST API that can be implemented in any
language -- and includes a reference implementation in Go. I'm eager
to add Java and Ruby implementations as well. And I'd be more than
happy to accept community contributions.
Boilerplate & code generation
Web application boilerplate is boring. You should do it once from
scratch (preferably down to the socket layer) and never do it again. I
struggled for the last few years to find the right system to reduce
boilerplate. If I were building a new line-of-business application as
an employee I'd pick one of Rails, ASP.NET, Spring, Django, or
similar.
I've never worked on one of those frameworks professionally and I've
never been able to force myself to learn any of them in my free
time. But even if I could use one of these, none of them get close to
giving you an entire functioning application with authentication,
pagination, filtering all based on your existing database.
Over the last few years though I've relied heavily on code generation
for Go projects. Code generation is basically the only way to conserve
type-safe code in Go. But it's similarly
popular in
more powerful languages like Java.
However none of the existing projects give you much flexibility or
provide you with enough templates to be useful.
DBCore
DBCore is written in F# and can be distributed as a static
binary on all systems .NET now supports (read: not just Windows!).
Reading from MySQL or PostgreSQL is supported but I'd like to see that
extended to include SQLite, Oracle, and MS SQL at least.
As mentioned, currently DBCore only provides a Go REST API
template. That only solves half the problem of building an application
though. And while there are some projects that can generate an admin
CRUD interface for you, I want to see that more tightly integrated
into DBCore. So I'll be introducing a new template for a browser
application as well. For each table in the database it will generate a
page showing paginated entries and allow you to create, update, and
delete.
Finally, while the tool only currently has a concept of "browser" and
"api" templates, the project should be able to accept any kind of
template and generate any text based on any database schema.