Well actually we do infer directly from the Postgres schema. Only for users not familiar with Postgres directly, we recommend going through the UI so that not only is the table created, but the Data API is also asked to track it and provide an API for it.
There is other metadata that we do need the user to specify, via the UI or the API, and that's for stuff like permissions and relationships.
Regarding, the unrestricted querying, we address it in one of the following ways:
1. Timing out queries running for longer than a specified interval.
2. Cursors and streaming data if the dataset requested is large.
3. Query templates: We allow the developer to create a RESTful API endpoint that has a limited pre-defined surface area (eg: GET data.mysite.com/v1/template/article?limit=10) which internally maps to a pre-defined query.
Our docs are still lagging behind on these unfortunately!
What do you guys do to restrict access? Any suggestions?