I'm going to give a specific example with the GitHub GraphQL API (which is the particular problem I want to solve), but the question seems generalizable to GraphQL in general.
Suppose I want to add a label 'high priority' to an issue #1234 on repository pytorch/pytorch. According to the API documentation, I should use the mutation https://developer.github.com/v4/mutation/addlabelstolabelable/ The input demands:
labelIds ([ID!]!)
The ids of the labels to add.
labelableId (ID!)
The id of the labelable object to add labels to.
OK, how do I get the IDs? In my code, I know I want the label 'high priority', but to actually communicate this to this mutation, I have to first resolve 'high priority' into an ID but doing another GraphQL call first. The same goes for what I want to label: I have a unique identifier in the form of pytorch/pytorch#1234, but I don't have the ID, I've got to look it up.)
So at the end of the day, I have to do three API calls to just label something, when I could have done it in REST instead with one call. In general, I see lots of GraphQL mutation APIs that talk only in IDs (even when there is some other canonical identifier available for the system), and I end up having to do extra round trips. Am I doing it wrong? Or is this really how GraphQL was designed?