Comments (1)
TL;DR: Recommend looking into other libraries such as gorm, upper.io/dbv3 etc.
There is good documentation in the README to help understand the schema
package, and how to use it for registering resources into a resource.Index
. There is not much documentation on how to do this specifically. The best real-world examples is to see how it's used by the rest
sub-packages.
We have been using rest-layer in this way for a while as we have both a REST and an RPC API, as well as internal routines. And to be honest, I will not recommend it unless you have a very strong need to use other parts of rest-layer.
There are some hard challenges to be aware of. Especially when it comes to resource validation, query preparation etc. Again, the best examples here is the code in the rest
package.
Some of our main challenges, by priority:
- Type safety: Type safety is very big challenge in in rest-layer because everything is a
map[string]interface{}
. While very dynamic, it's a lot of verbose and error prone type-casting involved when writing any kind of logic that operates on these objects, including resource hooks. - Payload preparation & validation: The preparation of a "raw" payload into something that can be sent to the DB involves a complex division into something called
base
andchanges
before you can insert it into the DB. Similarly, theprepare
step for queries is easy to forget. - Non-thread-safe schemas: The ways fields and schemas are generally defined, is by pointers that may provide a "compile" step. Because of this, if reusing a field definition in multiple schemas, it's not safe to Compile those schemas concurrently.
There are many good alternatives for abstracting resources in Go. Such as gorm, upper.io/db.v3, or maybe https://github.com/facebookincubator/ent. I recommend good resarch to find which one fits your needs.
from rest-layer.
Related Issues (20)
- Remove old sub-resource syntax HOT 4
- go module: cannot find module providing package testing/mem HOT 3
- Explicit $eq in filter passes whole predicate to Validate(Query) HOT 3
- OnInsert/OnUpdate hooks can modify the new resource item, Etag not recalculated HOT 7
- `Prefer: return=minimal` can hide resource item on server modification HOT 12
- Consistent empty / null fields HOT 4
- Remove resource hooks in favor of resource middleware HOT 12
- Newest `zerolog` versions cause a panic HOT 4
- Bogus error line, when returning empty response on 204
- Etag should not depend on external state HOT 4
- Assist AutoIncrement FieldValidator with SQL backend HOT 8
- Bulk PATCH support HOT 5
- Wrapping original issue in rest.Error HOT 7
- Feature Request: Cursor-based Pagination HOT 3
- pq: operator does not exist: uuid ~~ unknown HOT 7
- Filter on reference fields HOT 1
- Support for $not filter operation HOT 4
- Decouple ElemMatch from schema.Array struct
- openapi 3.1.0 support HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rest-layer.