In der im vorherigen Artikel vorgestellten GraphQL-Abfrageschreibmethode Sie fragen sich möglicherweise: "Wie verwende ich eine Variable in einer Abfrage?"
Im Fall von I. Ich wollte die von der REST-API erhaltenen Daten an die GraphQL-API übergeben Wie kann ich Variablen in eine Abfrage aufnehmen? Ich hatte eine Frage.
Wenn Sie also "Variablen an GraphQL-Abfrage übergeben" googeln __ Leicht verständliche Artikel treffen schließlich nicht! __ __
Auch diesmal ist es für Anfänger leicht zu verstehen (obwohl ich auch Anfänger bin ... Ich werde erklären, wie Variablen in GraphQL-Abfragen verwendet werden.
Dieses Mal werde ich die folgende Abfrage als Beispiel erläutern.
query {
repositoryOwner(login:"Github Benutzername") {
repositories(last:5){
nodes {
name
}
}
}
}
Wenn Sie den Benutzernamen von github angeben, Es ist eine Abfrage, um 5 neue aus dem Repository des angegebenen Benutzers zu erhalten.
In diesem Zustand handelt es sich jedoch nicht um eine dynamische Abfrage. Wenn Sie den Benutzernamen direkt in die Abfrage schreiben, können Sie nur das Repository für diesen Benutzer abrufen.
Wenn Sie beispielsweise den Benutzernamen von github eingeben, Beim Erstellen einer App, in der die letzten 5 Repositorys dieses Benutzers angezeigt werden Diese Abfrage kann nicht verwendet werden. Wie kann ich diese Abfrage zu einer dynamischen Abfrage machen?
Um diese Abfrage zu einer dynamischen Abfrage zu machen Sie müssen verstehen, wie die Abfrage variables geschrieben wird.
Bei der Übersetzung ins Japanische sind Variablen Variablen. ~~ (Ich kann nicht sagen, dass ich es bemerkt habe, als ich nach diesem Artikel gesucht habe oder sogar wenn mir der Mund gebrochen hat) ~~
Hier werde ich die "Schreibmethode" dieser Variablen erklären. Wenn Sie der vorherigen Abfrage Variablen hinzufügen und diese neu schreiben, sieht dies wie folgt aus.
query ($user: String!) {
repositoryOwner(login:$user) {
repositories(last:5){
nodes {
name
}
}
}
}
--variables--
{
"user": "username"
}
Wenn Sie vor und nach dem Umschreiben vergleichen, unterscheiden sich die erste und zweite Zeile sowie die drei Stellen unter den Variablen.
Beginnen wir zunächst mit der ersten Zeile
query ($user: String!) {
Die Beschreibung $ user: String! Wird nach der Abfrage hinzugefügt. Es schreibt Argumente, dh GraphQL-Argumente und Argumenttypen. Wenn Sie vor dem Argument user "$" schreiben, Außerhalb der Abfrage geschriebene Variablen können innerhalb der Abfrage als Argumente verwendet werden.
Dann die zweite Zeile
repositoryOwner(login:$user) {
Vor dem Umschreiben habe ich den Github-Benutzernamen direkt in den Anmeldewert geschrieben. Ich denke, es hat sich zu $ user geändert. Dadurch werden die übergebenen Daten als Argument verwendet Es handelt sich um eine dynamische Abfrage, bei der der Wert für die Anmeldung angegeben wird.
Schließlich die Beschreibung unten Variablen
{
"user": "username"
}
Mit GraphiQL können im Abfrageeditor Variablen geschrieben werden. Wenn Sie es dort schreiben, wird es mit der Beschreibung in der ersten und zweiten Zeile kombiniert, die ich zuvor erklärt habe. Es wird in der Abfrage als variabler Benutzer verfügbar sein.
… Dies ist in Ordnung für die Verwendung in GraphiQL. Bei der Verwendung in Rails-Apps ist dies etwas anders.
Deshalb ist es in Rails geschrieben.
Dieses Mal werde ich in Form des Hinzufügens zur neu erstellten Anwendung mit Gerüst erklären. Das ausgefüllte Formular lautet "Geben Sie den Namen eines Github-Benutzers ein und es werden die 5 neuesten Repositorys für diesen Benutzer angezeigt." Erstellen Sie so etwas.
Fügen Sie nach der Installation dem Controller Folgendes hinzu.
controllers/users_controller.rb
class UsersController < ApplicationController
...Kürzung...
Query = GqlTest(Dein eigener App-Name)::Client.parse <<-GRAPHQL
query ($user: String!) {
repositoryOwner(login: $user) {
repositories(last:5){
nodes {
name
}
}
}
}
GRAPHQL
def show
username = @user.name
@works = result(user: username).data.repository_owner.repositories.nodes
end
···Kürzung···
private
def result(variables = {})
response = GqlTest(* Ihr eigener App-Name)::Client.query(Query, variables: variables)
end
end
Wenn Sie den hinzugefügten Code erklären Die Abfrage ist Query = GqlTest (Ihr App-Name) :: Client.parse << - GRAPHQL Es ist in Ordnung, wenn Sie die Abfrage schreiben, die Sie zuvor nach dem Code in erstellt haben.
controllers/users_controller.rb
Query = GqlTest(Dein eigener App-Name)::Client.parse <<-GRAPHQL
query ($user: String!) {
repositoryOwner(login: $user) {
repositories(last:5){
nodes {
name
}
}
}
}
Was ich in der Show-Aktion hinzugefügt habe Mit dem Code, mit dem der in der neuen Aktion registrierte Benutzername als @ user.name registriert und im Benutzernamen gespeichert wird Code, der die Ergebnisdaten mit diesem Benutzernamen als Argument abruft. Benutzer: Benutzername ist Es wird im Variablenbereich unter dem Abfrageeditor von GraphiQL beschrieben.
controllers/users_controller.rb
def show
username = @user.name
@works = result(user: username).data.repository_owner.repositories.nodes
end
In der Ergebnismethode unter privat habe ich Folgendes hinzugefügt. Der Unterschied zum vorherigen Artikel liegt nach der Abfrage variables: variables Variablen können durch Beschreibung verwendet werden. Eine ausführliche Erläuterung dieses Teils finden Sie in der offiziellen Referenz von graphql-client. bitte bestätigen. (Offizielle Referenz: https://github.com/github/graphql-client)
controllers/users_controller.rb
private
def result(variables = {})
response = GqlTest(* Ihr eigener App-Name)::Client.query(Query, variables: variables)
end
end
Zum Abschluss wird die Ansicht show.html.erb geändert.
Ruby:views/show.html.erb
<% @works.each do |work|%>
<p><%= work.name %></p>
<% end %>
Bitte fügen Sie den obigen Code an einer beliebigen Stelle in show.html.erb hinzu, die von scaffold erstellt wurde. Ich denke, es wird angezeigt.
Wenn es wie oben angezeigt werden kann, ist es abgeschlossen!
Das ist alles, danke für deine harte Arbeit!
(Da ich diesmal mitten in der Nacht gekritzelt habe, kann es verschiedene Tippfehler geben ...)
Recommended Posts