2016-04-25 8 views
7

La versione 0.5.0 di graphql-js contiene una modifica alla funzione resolve - ora riceve un ulteriore parametro context.Quali sono i casi d'uso previsti per il contesto della funzione di risoluzione e i parametri rootValue?

Mi sembra che context sia progettato per trasportare dati di sessione utente. Qual è il caso d'uso per il parametro rootValue, ora?

+0

Sono anche confuso, ma penso che 'context' è principalmente per dati relativi all'autent generico e' rootValue' è per altri dati specifici dell'app. – Joon

+0

Dal momento che quasi tutte le app richiedono il controllo degli accessi basato sull'autenticazione, penso che abbiano deciso di metterlo come terzo argomento per comodità piuttosto che distruggendolo ogni volta dall'argomento delle informazioni. – Joon

+0

'rootValue' viene passato solo ai resolver di livello superiore mentre' context' è disponibile in ogni resolver. Ma non sono sicuro del perché questa distinzione sia in atto o di come 'rootValue' sia più utile. –

risposta

2

RootValue è il primo argomento per i resolver di livello superiore ed è ancora utile in quella funzione.

La query radice/tipo di mutazione potrebbe anche essere tecnicamente il tipo di risoluzione di un altro campo nello schema. Sarebbe scomodo se fosse possibile fornire un valore di input a quella funzione di risoluzione solo accedendovi tramite il tipo non-root. Ecco un esempio:

type Mutation { 
    someMutationField: Query 
} 

type Query { 
    someField: String 
} 

schema { 
    query: Query 
    mutation: Mutation 
} 

Un altro motivo per mantenere il rootValue: potrebbe essere usato per unire due GraphQL sotto-schemi insieme in uno schema più ampio, dove i sub-schemi risiedono su server diversi. Per essere in grado di farlo, è necessario disporre di un modo per passare il valore radice in una funzione di risoluzione di livello superiore insieme alla query. Il trasporto HTTP corrente utilizzato per express-graphql non ti consente di farlo, ma potrebbe essere facilmente aggiunto.

Anche se non ho mai visto nessuno utilizzare rootValue in questo modo, penso che sia probabile che prima o poi qualcuno lo userà in quel modo, o troverà qualche altro uso per questo, che è probabilmente il motivo per cui non è stato rimosso da GraphQL-JS.

Problemi correlati