5 ms·
"Business logic gets pushed into your front end because where else do you run it unless you make an API wrapper." Exactly. This is one of the things I never un
by DidYaWipe 1y ago
"Business logic gets pushed into your front end because where else do you run it unless you make an API wrapper."
Exactly. This is one of the things I never understood about Supabase's messaging: The highly-touted, auto-generated "RESTful API" to your database seems pointless. Why would I hard-code query logic into my client application? If my DB structure changes, I have to force new app versions on every platform because I didn't insulate back-end changes with an API.
Why would anyone do this?
- whstl 1y agoNobody but you is forcing you to put the “business logic” in the frontend. Both those techs might make this look convenient, but engineering rules must still be followed. Frontend should do validation and might have some logic that’s duplicate for avoiding round-trips… but anything involving security, or that must be tamper-proof, must stay in the server, or if possible be protected by permissions. There are whole classes of applications that can be hosted almost entirely by Supabase or Hasura. If yours isn’t, it doesn’t mean you should force it.
- DidYaWipe 1y agoWho said anything about forcing? I asked what the value of Supabase's most highly-touted features are, when they CATER TO the movement of such things as query logic to the front end. What else are you doing with an auto-generated RESTful HTTP "API" to the database? I also didn't mention security, let alone promote moving it to the front end.
- whstl 1y agoYou are the one mentioning “Why would I hard-code query logic into my client application?” The answer is: you wouldn’t. That’s not the point of any of those tools.
- DidYaWipe 1y agoYep, I'm the one. And the question stands. What is the point of an auto-generated HTTP API to the database, if not to let clients formulate queries? And why would you do that?
- whstl 1y agoPostgREST creates the same type of CRUD endpoint that one would create when writing a traditional backend with an (eg) MVC framework, and it does this without requiring a developer and with complete consistency. If "letting the client formulate queries" you mean "filter posts by DidYaWipe, sorting by date", this is also what traditional CRUD backends do.
- DidYaWipe 1y agoI wouldn't write a back end with an MVC framework, since it's not doing any presentation whatsoever. If PostgREST auto-generates three-table joins automatically to resolve many-to-many relationships and presents an appropriate endpoint, that's interesting.
- steve-chavez 1y agoYes, it does many-to-many joins automatically: https://docs.postgrest.org/en/v12/references/api/resource_embedding.html#many-to-many-relationships https://docs.postgrest.org/en/v12/references/api/resource_em....
- DidYaWipe 1y agoThanks for the reference. I'll check it out!
- steve-chavez 1y ago> If my DB structure changes, I have to force new app versions on every platform because I didn't insulate back-end changes with an API. To avoid the above problem, it's a standard practice in PostgREST to only expose a schema consisting of views and functions. That allows you to shield the applications from table changes and achieve "logical data independence". For more details, see https://docs.postgrest.org/en/v12/explanations/schema_isolation.html https://docs.postgrest.org/en/v12/explanations/schema_isolat....
- DidYaWipe 1y agoThanks. If you're writing functions, though, it seems like nearly as much work as writing traditional endpoints, no?
- steve-chavez 1y agoNot really, the work is much reduced. 1. If your function returns a table type, you can reuse all the filters that PostgREST offers on regular tables or views [1]. 2. The SQL code will be much more concise (and performant, which leads to less maintenance work) than the code of a backend programming language. 3. The need for migrations is a common complaint, but you can treat SQL as regular code and version control it. Supabase recently released some tooling [2] that helps with this. [1]: https://docs.postgrest.org/en/v12/references/api/functions.html#table-valued-functions https://docs.postgrest.org/en/v12/references/api/functions.h... [2]: https://supabase.com/docs/guides/local-development/declarative-database-schemas https://supabase.com/docs/guides/local-development/declarati...