Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.
Sign upProduct Roadmap 2019 #2894
Comments
manishrjain
added
the
roadmap
label
Jan 14, 2019
This comment has been minimized.
This comment has been minimized.
smolinari
commented
Jan 14, 2019
Would be nice if ACLs could be in the Community Edition. Scott |
This comment has been minimized.
This comment has been minimized.
smkhalsa
commented
Jan 14, 2019
•
@manishrjain Thanks for the update! Can you share any info about how you intend to implement the GraphQL spec while preserving the existing functionality? Custom directives? As for Live Streaming, will this simply be the Subscription portion of the GraphQL spec, or do you intend to implement live queries (such as with a |
This comment has been minimized.
This comment has been minimized.
styk-tv
commented
Jan 14, 2019
Would be totally awesome if we could have a chat about OpenID and protecting schema queries based on roles from the JWT tokens. https://blog.grandstack.io/authorization-in-graphql-using-custom-schema-directives-eafa6f5b4658. If required I could provide full time OpenIDConnect server (Keycloak) on a public endpoint for the duration of the implementation/testing. |
This comment has been minimized.
This comment has been minimized.
We will have a different endpoint called |
This comment has been minimized.
This comment has been minimized.
vespertilian
commented
Jan 14, 2019
•
Any chance of you offering a paid managed instance? |
This comment has been minimized.
This comment has been minimized.
smkhalsa
commented
Jan 14, 2019
@manishrjain For clarity, are we to understand that the |
This comment has been minimized.
This comment has been minimized.
GraphQL+- implements a lot of features, which are not part of the GraphQL spec, like variable assignment, math operations, shortest path queries, and so on. GraphQL isn't the right fit for all the features that one needs from a database. But, GraphQL is a great language for apps to be built on -- and that's the aim here, is to support it to allow building apps easier on Dgraph. Dgraph is a great graph DB, but also a great, general purpose primary DB for apps; and we see more and more people/companies use Dgraph to build apps.
Not a priority. It would depend on how things go in 2019, and whether we have the resources needed to pursue what would effectively be another huge project (almost a mini-company) within Dgraph. |
This comment has been minimized.
This comment has been minimized.
Support for multiple databases (schemas) on the same server is very important for us for the reasons mentioned in the relevant issue |
This comment has been minimized.
This comment has been minimized.
smolinari
commented
Jan 15, 2019
So, the intention is to have a standard GraphQL endpoint, so apps can directly access the Dgraph server? Scott |
This comment has been minimized.
This comment has been minimized.
styk-tv
commented
Jan 15, 2019
•
For outside-living apps like Web/Cli/Mobile you will still have to have an authentication proxy on query/mutation level. Which is going in the direction of neo4j plugin system. Not complete. Wouldn't it make more sense to add role-based-access-control based on OIDC? So Queries/Mutations can be protected by simple group decorator, then user's signed token has to contain list of groups user is subscribed to. Entire implementation of token verification is in this one file on Kubernetes repo. https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/oidc/oidc.go A good place to start. This would make it possible to expose /graphql endpoint to the world without having to rewrite every single call inside of API that ends up calling unprotected /graphql endpoint or with ACL's that don't fit authorization standards of any of the modern Web/CLI/Mobile apps. |
This comment has been minimized.
This comment has been minimized.
smolinari
commented
Jan 16, 2019
@styk-tv - There is also still the very important part of web interaction called user input sanitation, which is just as much, if not more, of a security aspect than RBACs or ACLs. I mean, we don't want to run into little Bobby Tables, right? How will Dgraph also handle user input sanitation (and the other things mentioned in that article linked to little Bobby)? Scott |
This comment has been minimized.
This comment has been minimized.
styk-tv
commented
Jan 16, 2019
Scott, Yes, graphql injections are real. So question is will dgraph as community work out authorization, DoS, injections or just say hey, here is /graphql we have worked out this issue or follow footsteps of bare graphql and let Apollo grow into a superpower? |
This comment has been minimized.
This comment has been minimized.
junknown
commented
Jan 16, 2019
Hi, no plans for open chyper support yet? |
This comment has been minimized.
This comment has been minimized.
No concrete plans for Open Cypher yet. We'll see about that if that changes and the year progresses. Re: |
This comment has been minimized.
This comment has been minimized.
junknown
commented
Jan 16, 2019
•
maybe a simple open cypher to graphql+- conversion engine can help those of us still stucked with a neo4j backend that wants to scale with dgraph,i wonder if, meanwhile,it Is possibile to build It externally as library |
This comment has been minimized.
This comment has been minimized.
smolinari
commented
Jan 17, 2019
That is smart and for that reason, I think it would be a wasted effort to offer a pure GraphQL connection to Dgraph, with the intentions of using Dgraph as a "backend" for client-side apps. There must be a layer of business logic in front of Dgraph and behind the GraphQL endpoint for any sized application to be safe and work smartly. Scott |
This comment has been minimized.
This comment has been minimized.
D1no
commented
Jan 22, 2019
•
Every few months I jump in to check on dgraph and I am excited to see manifested plans for GraphQL. I believe dgraph has the potential to become a go to general purpose dB for apps. For anyone asking about authentification, sanitisation and similar: The standard practice is to have (in this case) dgraph run behind something like graphql-yoga which is the server component that adds the business logic / authentification layer. In practice, every production GraphQL system looks like this: As soon dGraph supports standard spec graphQL, its DB power can be stitched to the GraphQL Server. The server handles auth, caching, stitching of other sources and serves the clients. On first glance, it might be a little confusing to conceptually differentiate the components. Anybody coming by, might want to read this post and that comment: In my advisory work regarding GraphQL, I often have this Q&A (copy past) Question
Answer
Question
Answer
|
This comment has been minimized.
This comment has been minimized.
smolinari
commented
Jan 22, 2019
•
This isn't quite correct IMHO. It would be more like this. MongoDB<—>Prisma -| or PostGres<—>PostGraphile-|<— GraphQL Clients (Web, Mobile, other Servers etc) or all kinds of backends<—>AWS Appsync-|<— GraphQL Clients (Web, Mobile, other Servers etc) or maybe Dgraph<—>GraphQL-Yoga-|<— GraphQL Clients (Web, Mobile, other Servers etc) or also maybe Dgraph<—>Business Logic Server<—>GraphQL Gateway-|<— GraphQL Clients (Web, Mobile, other Servers etc) In other words, Dgraph shouldn't be placed in the same boat as Prisma, AWS AppSync or PostGraphile. It is ONLY a database, currently and I highly doubt it will get to be much more or rather, I don't think it should. Again IMHO. Scott |
This comment has been minimized.
This comment has been minimized.
D1no
commented
Jan 22, 2019
•
Prisma is only an adapter for managing old school databases via graphQL (table creation etc) and should not talk to the public directly as it doesn’t provide access logic (just like a DB). As its website header says “Prisma replaces traditional ORMs”. It would be like having mongoose for mongoDb exposed to the public. Its possible, but not advised. Beside, the whole point of GraphQL is to have one request to serve everything in one query response. The diagram above would mean clients have 3 endpoints to manage and would have to merge & cache themselves. A graphql server is the one caching and stitching. I.e. for serving a nice friend list feature, taking the So native GraphQL support through dgraph is baisically just that = “prisma” + db. Or Postgres + PostGraphile, or Neo4j + GraphQL Plugin. So it very well lives in the same boat and would be a great alternative. On a side note: AppSync is a very different thing in the list. AppSync is like GraphCMS, meteor, or to be understood as a firebase solution in GraphQL. When dgraph is bringing GraphQL support, its nothing more than a dB with a smart REST / GraphQL interface for easy stack integration. And that is great. |
This comment has been minimized.
This comment has been minimized.
smolinari
commented
Jan 22, 2019
•
I was assuming yoga was in front of Prisma. To be more correct, it should be this. MongoDB<—>Prisma -business logic-GraphQL-Yoga-| The point I was trying to make overall was, Dgraph shouldn't be connecting straight to GraphQL Clients (outside of servers). Scott |
This comment has been minimized.
This comment has been minimized.
D1no
commented
Jan 22, 2019
Haha |
This comment has been minimized.
This comment has been minimized.
styk-tv
commented
Jan 23, 2019
@smolinari Thanks Scott. Your explanation lead me to https://github.com/maticzav/graphql-shield which is a dream come true. |
This comment has been minimized.
This comment has been minimized.
smolinari
commented
Jan 23, 2019
•
@D1no - Actually, I think Dgraph does need a user/ role management, because that would offer a way to get a form of logical separation within a database for the purposes of multi-tenancy. What Dgraph doesn't need is to have an extra GraphQL API as mentioned here:
The current GraphQL API should be specs compliant to begin with (and even then, GraphQL Clients outside of other servers shouldn't connect to it directly). I understand trying to keep backwards compatibility, but they shouldn't have broken away from the spec to begin with. That's what specs are for. I guess if the new endpoint is to offer a specs compliant GraphQL API and it wasn't intended for client-side access (as in devices on the web) and at some point in a major version, GraphQL+ will be deprecated, then I guess I am for it too. I might have misunderstood the issue that started it all, as the OP was talking about Relay and Apollo, which are client-side (as in devices on the web) libraries. If that was my misunderstanding all along, then I apologize for wasting everyone's time. Scott |
This comment has been minimized.
This comment has been minimized.
styk-tv
commented
Jan 28, 2019
•
That makes me curious, please consider this: If /graphql is not to be used directly by the clients (no jwt auth mechanism, not recommended to be exposed outside) then what is the point of /graphql endpoint built in? In neo4j ALL my interactions with the db are using neo4j-graphql-js using bolt protocol (not through /graphql plugin). To follow that example, if graphdb could follow similar pattern of creating This way |
This comment has been minimized.
This comment has been minimized.
bandirsen
commented
Jan 29, 2019
Since GraphQL endpoint usually consumed directly by public client, I vote that GraphQL support as new Dgraph client API that can be only used by Dgraph client or separate GraphQL-Dgraph conversion package/library, rather than opened to public /graphql endpoint. First reason, just like some others already state, separated security/auth/authz will be a problem, I'm afraid at the end Dgraph will be pushed to be an oauth/openid client, while not all of us using it, Dgraph should be remain agnostic to that kind of technology. Second reason is performance, conversion from GraphQL query to Dgraph query would be a resource intensive, let the backend app server handle it, while Dgraph server focus on dealing with database. Third reason is confusing multiple schemas, GraphQL it self can have more than one schemas (for public, for admin, etc) let this GraphQL schema variation and GraphQL query validation handled by backend app server before sent it to Dgraph. |
This comment has been minimized.
This comment has been minimized.
D1no
commented
Jan 29, 2019
•
@styk-tv A GraphQL API is like a very smart Rest API. You can use it to serve clients on the web (browser, mobile app etc.) or other services (apache server, BI, data warehouse etc.). The later is meant for dgraph — spec compliant GraphQL means seamless service to service communication.
Graph QL is language / library independent; i.e. I have a C# & Erlang service that consume GraphQL. It respects the spec, and anything that supports the spec can be easily integrated. That is what the endpoint is for. It elevates access via protocol instead of library transform logic, providing to any language:
The Gateway (like Apollo, shield etc.) deals with Auth/Roles etc and is completely unrelated to the DB. Those libraries are merely a wrapper for GraphQL spec.
I.e. Service to service means, you could build graph analytics of open source commits in dgraph and merge them effortlessly with GitHubs GraphQL API to go even deeper. |
This comment has been minimized.
This comment has been minimized.
styk-tv
commented
Jan 31, 2019
@D1no I think fundamentally we're talking about the same thing. Let's use terminology from your diagram. My interests are in GraphQL Gateway (with OpenID) so parts of the token data can participate in the queries (like who is the user or what groups they belong to). Microservices layer needs to understand the database. So in order not to mix and not to retype the schema of the database in the Micoservices layer you need a smart set of components so you can define security against the schema. Currently this can be COMPLETELY abstracted using two methods in my case. By using neo4j-graphql-js i have control over schema augmentation to autogenerate queries, mutations and subscriptions as I see fit without rewriting resolvers (or by writing only the ones I want leaving types autogenerated) As well as in the same schema definition I can have Role(Group)-Based-Access-Control defined (graphql-shield with openid) not only per query/mutation/subscription but also on field level. (again without retyping my resolvers which is a massive job especially when you have multiple siloed teams doing it). Above BTW is 100% reality with only two npm's. This 95% decrease in effort of Gateway+Microservices is what this discussion should be about. This is not 2013. Now in regards to language its the community adoption rates that should drive focus initially. Personally you may have C#, Erlang or I may have Python or @manishrjain may have Go but you can't ignore adoption and effort that goes into Node for Yoga/Apollo for the GraphQL Gateway and Microservices layers from your diagram. It would be silly to ignore this if this project want's to truly participate in GraphQL community. So having said that focus on Node.js (npm) component |
This comment has been minimized.
This comment has been minimized.
brianbroderick
commented
Feb 14, 2019
While it's possible with custom code inside a transaction, it's fairly brittle since all writes to these nodes would need to run through this custom code. If someone isn't aware of this (or if the db is accessed from outside application code), duplicate records can easily be written. It also makes the application code unnecessarily complicated. |
manishrjain commentedJan 14, 2019
•
edited by danielmai
Here's the product roadmap for 2019:
Enterprise features:
Tell us what more you'd like to see happen in 2019!