Maison  >  Article  >  développement back-end  >  Comment analyser la requête graphql pour obtenir le nom de l'opération en cours ?

Comment analyser la requête graphql pour obtenir le nom de l'opération en cours ?

PHPz
PHPzavant
2024-02-09 13:57:081000parcourir

如何解析 graphql 查询以获取 go 中的操作名称?

l'éditeur php Baicao vous présente comment analyser la requête GraphQL pour obtenir le nom de l'opération dans Go. GraphQL est un langage de requête utilisé pour obtenir et modifier des données. Dans le langage Go, nous pouvons utiliser certaines bibliothèques pour analyser les requêtes GraphQL et extraire les noms d'opérations. Les étapes spécifiques consistent d'abord à analyser la chaîne de requête GraphQL, puis à obtenir le nœud racine, puis à parcourir les nœuds enfants du nœud racine pour déterminer si le type de nœud est un type d'opération. Si tel est le cas, obtenez le nom de l'opération. De cette façon, nous pouvons facilement extraire le nom de l'opération dans Go à partir de la requête GraphQL pour un traitement et une opération ultérieurs.

Contenu de la question

J'utilise cette bibliothèque go pour analyser les chaînes de requête graphql : github.com/graphql-go/graphql/language/parser.

J'ai le code suivant :

query := "subscription event {event(on: "xxxx") {msg    __typename  }}"
p, err := parser.Parse(parser.ParseParams{Source: query})

Le champ p*ast.document的实例。 p 有一个 definitions renvoyé, qui est un tableau ast.node[].

Mais je ne sais pas comment obtenir le nom de l'opération à partir de la requête. Dans ce cas, ça devrait être subscription.

Solution

Parce que p.definitions fait partie de node, et node est l'interface implémentée par ast.operationdefinition.

Ainsi, afin d'extraire les données du nœud de définition d'opération, vous devez effectuer une assertion.

for _, d := range p.Definitions {
    if oper, ok := d.(*ast.OperationDefinition); ok {
        fmt.Println(oper.Operation)
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer