Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

GraphQL requires you to know upfront what you want to receive. You can't for example receive data for a menu with submenus with undetermined level of depth. You can hack your way around the problem, but it's ugly.

Another problem GraphQL hasn't tackled (afaik) is polymorphism. You can say "hey give me this person" or "give me this company", but what if you want a customer that can be either a person or a company?



> Another problem GraphQL hasn't tackled (afaik) is polymorphism. You can say "hey give me this person" or "give me this company", but what if you want a customer that can be either a person or a company?

http://graphql.org/learn/schema/#interfaces

  searchPersonOrCompany(name: "abc") {
    ... on User {
     first_name
     last_name
    }
    ... on Company {
     business_name
    }
  }


As for the undetermined depths problem -- I agree to an extent.

GraphQL can't return depths without you querying for it unless one of the field is a JSON blob.. but at the same time, I like that it does that.

In your example of menu w/ submenus, I think I would prefer to load the first 2 level, then preload level 3 when level 2 is activated, and preload level 5 when level 4 is activated, and so on.

Apollo makes this quite easy.


Are you saying to request each level as needed? That's a lot of round trips, especially if levels need to be opened on mouseover or something.


Nah, just query for as many levels as you think you might need up front.


Well today I learned a couple things. Thanks for the example and ideas.


If I want to get all levels of an arbitrarily nested tree, I just query for all of the objects that are in the tree in a flat array and then reconstruct the tree on the client side using the parent/child Ids.

This is similar to what I would have to do server side if I were using SQL to get the data and then processing it to return a tree in JSON.

If I know how deep the tree will be (and it is only two or three levels) I query it directly with graphql




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: