I made nodb, a RESTFful API to store and fetch JSON
nodb.sh
nodb.sh
The main value prop of a DB is performance, moreso than the interface. How is this different from S3 or Firebase’s rest API?
> Nodb can easily accommodate an increase in the number of requests without breaking down or becoming slow. Your app remains responsive and reliable, even during periods of high demand.
From the limitations docs page:
> Number of read (GET) requests is limited to 10k per month
Filesystems are databases. Do we use filesystems because they're faster than doing direct i/o?
There isn't a value proposition for databases, because a value proposition is a business statement. If there were a business statement for databases, it would be a management interface for data. Nobody cares if a database is fast, they care if they can get their data in and out easier.
This is just bunch of vacuous statements. Are you suggesting this product exists not to serve a business prop or value ?
> Nobody cares if a database is fast
Businesses do. There’s a reason people don’t attempt to build their own database.
Every serious database meant for production use takes performance into consideration. People would just roll their own database otherwise, but we pile into Postgres, or even MongoDb, because they’re battletested and has had years of optimizations. More than half of the work in database implementations is in engine and query optimization.
> they care if they can get their data in and out easier.
Then just store and read flat files from disk.
Strange to use a throwaway to make this comment. It seems like you are the author justifying a product that does need to exist.
It works like this, you go to the dashboard on dash.nodb.sh and create apps and environments. Then via API you can create your JSON models.
An API endpoint is split like this /{appName}/{envName}/your-model/:id/you-model/:id/...?token={accessToken} This way you can split your data between environments like "dev" or "prod". And every environment is protected by an access token which is generated by nodb when you create a new environment in the dashboard. Only apps and environments have to be created in the dashboard behind bearer token, but your JSON models are protected by access token, so you can call HTTP requests easily from your code.
I would like someone to share their thoughts on this, whether this would be useful when working on any app, web or mobile, or inside cloud functions. In the docs on docs.nodb.sh is described everything (so far) about the API.
You should try to find your target audience and see how you can make nodb better then what ever db/solution that audience is using instead of nodb
Good luck!
Could you elaborate a bit?
If you're just focusing on making a pure developer tool, a good example of successful execution is cronitor.io.
Usually in REST APIs the auth token is passed via some HTTP header.
https://stackoverflow.com/a/499594
I don't think proxy servers or sniffers see GET data - it's encrypted, assuming HTTPS of course. Server logs might be an issue. Browser logs and accidentally sharing is definitely a bigger issue. Less of a concern if API is only used behind the scenes by apps though.
Disclaimer: I'm not an auth expert!
Proxies with MITM (mostly corporate) would see everything, because they are terminating client SSL/TLS.
Yes, headers or even as a data in the POST request.
> Simply, user can accidentally send the link with token in chat, etc.
Yep! Even more - it can be seen in the URL even if the user send a screenshot.
Just hit F12 in you browser, switch to the Network tab and look what happens when you do the things.
TL;DR: no, but you should be vary of how things are logged and/or shared.
Eg: you see a screenshot with https://bank.com/pay.php?from=17255252&to=6445675665&amount=... URL in the browser...
Having them in the query params was intended for sharing indeed. I wouldn't expect someone using it on the frontend of course. I might switch to having them in the headers instead, as it was initially like that. Idea was to use the service with minimal requirements.
Tokens can be set as READ_ONLY, these tokens are only meant to be used with GET requests. So you can share the link to use in some other app for example. Again, headers might be better however we can't share them, i.e. simple copy paste.
Disclaimer: I'm not your target audience, but I've investigated a lot of these services for my own things, and these are my feelings after an initial look at your website. I'd honestly not return for a second look under normal conditions.
The product is at early stage and I will be adding more texts of all sorts (like disclaimers) and features. Data is truly not shared with anyone, it's in a dedicated server, but it's NOT in an encrypted database for now. It will be when it's developed.
All that is collected from users is their email address, since you can sign up using Google and Github auth only. Behind this auth one can create apps, environments and access tokens. Afterwards, requests to the API are open under access token.
Product is free for now, thus no pricing info at the moment.
1. Some data reliability guarantees (eg. how does this compare with Amazon S3 [1] that provides 99.999999999% durability and 99.99% availability of objects over a given year)?
2. Backup and restore
3. User-generated keys to encrypt the data
4. User-specified indexing
[1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/DataDu...Many production applications use substantially more than this in 1 second. I think even most people developing a project will exceed that limitation before even releasing it.
You should put a disclaimer somewhere more obvious.
Second note is, without indexing options, what's to distinguish you from S3, or Dynamo, or DocumentDB, or Mongo, or Rocks, Level, Foundation, Redis, Fauna, Postgres. JSON isn't enough, what's the hook?
With an RDBMS I know that I can use hash key indexes for fast lookups on an exact key. I can use B-Tree indexes for range or partial key lookups.
For S3 I know that I can do exact lookups, or prefix scans, and that scans occur in ascending order, but cannot be done in descending order, etc.
I know nothing of what lookup schemes are available to me in your application, and what kind of Big O profile to expect from each. It has nothing to do with whether it's a grocery app or a movie app.
I merely need to persist a single string between deploys, which gets changed when the app is running. And buying another service like S3, or hosting postgres or a databse is overkill.
So this seems promising!
That sounds dismissive but I don't mean it that way. I'm sure you've chosen wisely. I just find the problem intriguing because I don't know of any obvious solution and it's not one of the common problems people have with persistence.
I'm trying to think of what sort of stateful servers you might be using anyway that you can piggyback for this. Some ideas:
- SSH to any Unix box really
- Web-based pastebin service with an API
- Regular Twitter tweets
- Something stored on whatever you are using to conduct the deployment
- An image uploaded to imgur where the image data are the string you need
- DNS records
- Any web service where you have a user profile editable through an API you could use one of the profile fields to store the string
The list is getting more stupid as I go so I should probably stop there.
But if you have written the service such that you can reject a deployment unless you're sure it worked, you are technically free to use quite stupid ways to store the data because worst case the deployment just fails and the old code chugs on.
Also your ideas are interesting! The last one especially.
> But if you have written the service such that you can reject a deployment unless you're sure it worked, you are technically free to use quite stupid ways to store the data because worst case the deployment just fails and the old code chugs on.
I do and there's lots of error handling, so I'm not worried about doing a fun idea like editing a user profile via API.
Your suggestions have my gears turning.
When prototyping an app, this would be a biiiiig time saver!