schema - graphiql - input type graphql
Obtener GraphQL todo el esquema de consulta (4)
Quiero obtener el esquema del servidor. Puedo obtener todas las entidades con los tipos pero no puedo obtener las propiedades.
Consiguiendo todos los tipos:
query {
__schema {
queryType {
fields {
name
type {
kind
ofType {
kind
name
}
}
}
}
}
}
Cómo obtener las propiedades por tipo:
__type(name: "Person") {
kind
name
fields {
name
type {
kind
name
description
}
}
}
¿Cómo puedo obtener todos los tipos con las propiedades en solo 1 solicitud? O incluso mejor: ¿Cómo puedo obtener todo el esquema con los mutadores, enumeraciones, tipos ...
Esta es la consulta que utiliza GraphiQL (captura de red):
query IntrospectionQuery {
__schema {
queryType {
name
}
mutationType {
name
}
subscriptionType {
name
}
types {
...FullType
}
directives {
name
description
locations
args {
...InputValue
}
}
}
}
fragment FullType on __Type {
kind
name
description
fields(includeDeprecated: true) {
name
description
args {
...InputValue
}
type {
...TypeRef
}
isDeprecated
deprecationReason
}
inputFields {
...InputValue
}
interfaces {
...TypeRef
}
enumValues(includeDeprecated: true) {
name
description
isDeprecated
deprecationReason
}
possibleTypes {
...TypeRef
}
}
fragment InputValue on __InputValue {
name
description
type {
...TypeRef
}
defaultValue
}
fragment TypeRef on __Type {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}
}
}
}
}
Puede usar la consulta de introspección de GraphQL-JS para obtener todo lo que le gustaría saber sobre el esquema:
import { introspectionQuery } from ''graphql'';
Si solo desea la información para los tipos, puede usar esto:
{
__schema: {
types: {
...fullType
}
}
}
Que utiliza el siguiente fragmento de la consulta de introspección:
fragment FullType on __Type {
kind
name
description
fields(includeDeprecated: true) {
name
description
args {
...InputValue
}
type {
...TypeRef
}
isDeprecated
deprecationReason
}
inputFields {
...InputValue
}
interfaces {
...TypeRef
}
enumValues(includeDeprecated: true) {
name
description
isDeprecated
deprecationReason
}
possibleTypes {
...TypeRef
}
}
fragment InputValue on __InputValue {
name
description
type { ...TypeRef }
defaultValue
}
fragment TypeRef on __Type {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
ofType {
kind
name
}
}
}
}
}
}
}
}
`;
Si eso parece complicado, es porque los campos pueden ser arbitrariamente envueltos en no Nulos y Listas, lo que significa que técnicamente, incluso la consulta anterior no refleja el esquema completo si sus campos están envueltos en más de 7 capas (lo que probablemente no sea el caso) ).
Puedes ver el código fuente de introspectionQuery here .
Si quieres hacerlo por ti mismo, lee estos códigos:
Hay una herramienta de estado de arte modular 「graphql-cli」, considere mirarla. Utiliza el buildClientSchema del paquete 「graphql to para compilar el archivo .graphql IDL a partir de datos de introspección.
Actualizar
Usar graphql-cli
ahora es el flujo de trabajo recomendado para obtener y actualizar su esquema.
Los siguientes comandos te ayudarán a comenzar:
# install via NPM
npm install -g graphql-cli
# Setup your .graphqlconfig file (configure endpoints + schema path)
graphql init
# Download the schema from the server
graphql get-schema
Incluso puede escuchar los cambios de esquema y actualizar continuamente su esquema ejecutando:
graphql get-schema --watch
En caso de que solo quiera descargar el esquema GraphQL, use el siguiente enfoque:
La forma más fácil de obtener un esquema GraphQL es usar la herramienta CLI get-graphql-schema .
Puedes instalarlo vía NPM:
npm install -g get-graphql-schema
Hay dos formas de obtener su esquema. 1) Formato GraphQL IDL o 2) Formato de consulta de introspección JSON.
Formato IDL de GraphQL
get-graphql-schema ENDPOINT_URL > schema.graphql
Formato de introspección JSON
get-graphql-schema --json ENDPOINT_URL > schema.json
o
get-graphql-schema -j ENDPOINT_URL > schema.json
Para obtener más información, puede consultar el siguiente tutorial: Cómo descargar el esquema IDQL de GraphQL