Giter VIP home page Giter VIP logo

Comments (1)

smyrman avatar smyrman commented on May 28, 2024

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:

  1. 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.
  2. 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 and changes before you can insert it into the DB. Similarly, the prepare step for queries is easy to forget.
  3. 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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.