Ask HN: Which stack will get my MVP API off the ground fastest?
I have an idea for a service as a side business and need some kind of E-commerce API for it. The main feature is it’s going to produce one-off artifacts and none of the off-the-shelf solutions I’ve looked at really fit.
Basically I need a way to stand up an API with an /price/ endpoint and a /orders/ endpoint that run a bit of logic, put stuff in a database and trigger the payment processor flow. Easy-peasy except I have analysis paralysis over what to build it with and where to host it.
I’m comfortable with “classic” .net and dabbled in Node.js. I’d love to build it as an .Net Web API but the prospect of cloud hosting scares me (plus azure is freakin pricy).
30 comments
[ 3.9 ms ] story [ 83.8 ms ] threadBoth will integrate easily with Postgres, and for flask, take a look at the peewee ORM.
Most cost efficient would be to Spin up a cheap droplet in digital ocean, install docker-compose with a Postgres service and python image. In the python image, just boot up a Django server on port 80. If you need https, youll need to add something in front of Django, like nginx to handle ssl termination.
App engine could also be a very quick and cheap way - you get ssl, and domain for free, but you do need to buy into their way of doing things, which has a bit of a learning curve .
You can use a digital ocean or light sail instance to host Dokku for way cheaper than Heroku and you have more control of the machine. Downside is Dokku is made for one server, so you can only really scale to like 64 cores before you need something else.
Most apps will never need more than one server realistically, but you have to determine that for yourself!
I use it for a Flask app. FWIW, I believe digital ocean has tutorials and an image to use to get Dokku off the ground fast!
The upside is that aiohttp's built in server can be put up in production with a lot more confidence than Django's built-in server, meaning one less layer to configure
http://pojo.sodhanalibrary.com/ConvertJsonToSQL
and your selects, updates etc
http://convertjson.com/json-to-sql.htm
With .NET Core and Postgres you can get something stood up within a few days and host on a cheap Linode, Digital Ocean or another provider's box for $6 a month or so. That should last you scalability wise until you have enough money from it to do something else and gives you type safe, performant code.
I just logged into Digital Ocean to check, I'm running a single 512 MB memory droplet with a 20GB disk for $6 a month and apart from getting familiar with Linux (especially managing user permissions correctly), setup was easy, I run an Nginx reverse proxy in front of a Kestrel instance but I know people have said you don't even need Nginx.
I also used Let's Encrypt for a free SSL certificate and setting that up to correctly refresh on a CRON job was the hardest part of the whole thing.
I've no doubt the site [1] would fall over if it ever got anything like the HN hug of death but this would be easy to plan for assuming organic growth, I imagine there are fairly easy ways to set up load balancing for droplets on DO and moving the database onto a separate droplet etc should give you enough headroom for scaling.
The code [2] is way outdated now and awful quality but it's on GitHub.
Others who have more experience may say it's worth learning a certain cloud feature or serverless stuff but my gut feeling is it's better to get the thing out there and worry about that sort of stuff when you get there.
Edit: It's worth mentioning that [0] talks about developing the site on Linux, though I did that just to get a feel for Linux it's not at all necessary and much easier to do the development on Windows with Visual Studio then all you need to do is:
To get a published site to run on the Linux droplet/machine.[0]: https://www.hanselman.com/blog/PublishingAnASPNETCoreWebsite...
[1]: https://eliot-jones.com/
[2]: https://github.com/EliotJones/LightBlog
As for .NET hosting prices, I don't understand why you need complex hosting. A smallish instance paired with SQL Server RDS (both of which can be hosted on Linux or Windows) should suffice.
Keep in mind that both AWS and Azure offer a free tier when you're starting up:
https://azure.microsoft.com/en-us/overview/startups/
https://aws.amazon.com/free
If you are not familiar with ruby, go with a language you are familiar with. There is a clone in every major language. It’s just that RoR is the “original”.
Best thing you can do is to make something that just works in fastest way possible. Anything that can print out text will work. You will always have a chance to make it better once it starts to get some traction.
Benefits - Azure App Service free tier is awesome. AppVeyor have a 14 day trial that supports deployment directly from Git to Azure and .Net Core is awesome.
Here’s a blog I wrote recently which covers this exact implementation -
https://www.simongilbert.net/xunit-ci-azure-appveyor-aspdotn...
In terms of a database implementation, Azure’s NoSQL table storage is super cheap and awesome, as covered here -
https://www.simongilbert.net/dependency-injection-aspnet-mvc...
"But deployment" deployment is cheap.
"But hosting" hardware is cheap.
"But time" time is _not_ cheap.
You don't need to screw around and learn another language/framework/ecosystem to get an MVP off the ground. You need to be able to hit the ground running and never let off the gas. This means you need to be able to change/adapt/feature what you need to. That takes brain cells. So does learning another language/framework/ecosystem. Don't make it harder than it needs to be.
Just get started knocking out a prototype running locally and break the analysis paralysis, you'll have no end of hosting options to choose from later. You'll be amazed what a 5 dollar a month Ubuntu server from Digital Ocean or similar will handle running .NET Core. Azure is obviously an option too but don't rule out AWS.