Inhaltsverzeichnis
Was ist GraphQL?
Was bauen wir?
Start
GraphQL -Schema -Typ
GraphQL Parser
Abfrage
Mutationen
Zusammenfassen
Heim Web-Frontend CSS-Tutorial Erstellen Sie GraphQL -APIs mit Knoten

Erstellen Sie GraphQL -APIs mit Knoten

Apr 09, 2025 am 09:14 AM

Erstellen Sie GraphQL -APIs mit Knoten

Wir haben alle viele Interessen und Hobbys. Zum Beispiel interessiere ich mich für JavaScript, Indie-Rock und Hip-Hop 'der 90er Jahre, unpopulärer Jazz, die Stadt Pittsburgh, Pizza, Kaffee und Filme mit John Lury. Unsere Familie, Freunde, Bekannte, Klassenkameraden und Kollegen haben auch eigene soziale Beziehungen, Interessen und Hobbys. Einige dieser Beziehungen und Interessen überschneiden sich, wie mein Freund Riley ist genauso an Hip-Hop und Pizza der 90er Jahre interessiert wie ich. Andere haben keine Überschneidung, wie meinen Kollegen Harrison, der Python gegenüber JavaScript bevorzugt, nur Tee trinkt und aktuelle Popmusik bevorzugt. Alles in allem hat jeder von uns eine Karte der Verbindung mit Menschen in unserem Leben und wie sich unsere Beziehungen und Interessen überschneiden.

Diese Art von miteinander verbundenen Daten ist genau die Challenge GraphQL, die zunächst in der API -Entwicklung gelöst wurde. Durch das Schreiben der GraphQL -API können wir Daten effektiv verbinden, die Komplexität reduzieren und die Anzahl anfordern und gleichzeitig die erforderlichen Daten dem Client genau zur Verfügung stellen. (Wenn Sie die GraphQL -Metapher bevorzugen, sehen Sie sich GraphQL einer Cocktailparty an.)

In diesem Artikel werden wir das Apollo Server -Paket verwenden, um eine GraphQL -API in node.js. Dazu werden wir das grundlegende GraphQL -Thema untersuchen, GraphQL -Muster schreiben, Code entwickeln, um unsere Musterfunktionen zu analysieren und auf unsere API auf die GraphQL Playground -Benutzeroberfläche zuzugreifen.

Was ist GraphQL?

GraphQL ist eine Open -Source -Abfrage- und Datenmanipulationssprache für APIs. Das Entwicklungsziel ist es, einen einzelnen Endpunkt für Daten bereitzustellen, sodass Anwendungen die genauen Daten anfordern können, die sie benötigen. Dies hilft nicht nur, unseren UI -Code zu vereinfachen, sondern verbessert auch die Leistung, indem die Datenmenge eingeschränkt werden, die über das Netzwerk gesendet werden müssen.

Was bauen wir?

Um diesem Tutorial zu folgen, benötigen Sie den Knoten v8.x oder höher und einige Erfahrung mit der Befehlszeile.

Wir werden eine API -Anwendung für Buchauszüge erstellen, mit denen wir unvergessliche Absätze auf dem, was wir lesen, speichern können. API -Benutzer können "CRUD" (erstellen, lesen, aktualisieren, löschen) Vorgänge in ihren Auszügen ausführen:

  • Erstellen Sie einen neuen Auszug
  • Lesen Sie einen einzelnen Auszug und eine Liste von Auszügen
  • Aktualisierte Auszüge
  • Löschen Sie den Auszug

Start

Erstellen Sie zunächst ein neues Verzeichnis für unser Projekt, initialisieren Sie ein neues Knotenprojekt und installieren Sie die von uns benötigten Abhängigkeiten:

 <code># 创建新目录mkdir highlights-api # 进入目录cd highlights-api # 初始化新的节点项目npm init -y # 安装项目依赖项npm install apollo-server graphql # 安装开发依赖项npm install nodemon --save-dev</code>
Nach dem Login kopieren

Bevor wir fortfahren, lassen Sie uns unsere Abhängigkeiten aufschlüsseln:

  • apollo-server ist eine Bibliothek, mit der wir GraphQL in unseren Knotenanwendungen verwenden können. Wir werden dies als eigenständige Bibliothek verwenden, aber das Apollo -Team hat auch Middleware für die Arbeit mit Express, HAPI, Fastify und KOA in vorhandenen Knoten -Webanwendungen erstellt.
  • graphql enthält die GraphQL-Sprache und ist eine erforderliche Peer-Abhängigkeit für apollo-server .
  • nodemon ist eine nützliche Bibliothek, die unser Projekt auf Änderungen überwacht und unseren Server automatisch neu startet.

Lassen Sie uns nach der Installation unseres Pakets die Stammdatei der Anwendung namens index.js erstellen. Jetzt verwenden wir console.log() um eine Nachricht in dieser Datei auszugeben:

 <code>console.log("? Hello Highlights");</code>
Nach dem Login kopieren

Um unseren Entwicklungsprozess zu vereinfachen, aktualisieren wir scripts Skriptobjekt in der Datei package.json , um nodemon -Paket zu verwenden:

 <code>"scripts": { "start": "nodemon index.js" },</code>
Nach dem Login kopieren

Jetzt können wir unsere Anwendung starten, indem wir npm start in der Terminalanwendung eingeben. Wenn alles gut funktioniert, sehen Sie dann ? Hello Highlights die an Ihrem Terminal angemeldet sind.

GraphQL -Schema -Typ

Muster sind schriftliche Darstellungen unserer Daten und Interaktionen. Durch das erforderliche Muster implementiert GraphQL eine strenge Planung für unsere API. Dies liegt daran, dass die API nur im Schema definierte Daten zurückgeben und Interaktionen durchführen kann. Die Grundkomponente des GraphQL -Musters ist der Objekttyp. GraphQL enthält fünf integrierte Typen:

  • String: Strings, die mit UTF-8-Zeichen codiert werden
  • Boolean: wahrer oder falscher Wert
  • INT: 32-Bit Ganzzahl
  • Float: Float Value
  • ID: Eindeutige Kennung

Wir können diese grundlegenden Komponenten verwenden, um Muster für APIs zu erstellen. In einer Datei namens schema.js können wir die gql -Bibliothek importieren und die Datei für unsere Schema -Syntax vorbereiten:

 <code>const { gql } = require('apollo-server'); const typeDefs = gql` # 模式将放在这里`; module.exports = typeDefs;</code>
Nach dem Login kopieren

Um unser Muster zu schreiben, definieren wir zuerst den Typ. Überlegen wir, wie wir Muster für unsere Auszugsanwendung definieren. Erstens werden wir einen neuen Typ namens Highlight erstellen:

 <code>const typeDefs = gql` type Highlight { } `;</code>
Nach dem Login kopieren

Jeder Auszug verfügt über eine eindeutige ID, einige Inhalte, Titel und Autor. Der Highlight -Modus sieht so aus:

 <code>const typeDefs = gql` type Highlight {  id: ID  content: String  title: String  author: String } `;</code>
Nach dem Login kopieren

Wir können einige dieser Felder zu einem erforderlichen Feld erstellen, indem wir ein Ausrufezeichen hinzufügen:

 <code>const typeDefs = gql` type Highlight {  id: ID!  content: String!  title: String  author: String } `;</code>
Nach dem Login kopieren

Obwohl wir einen Objekttyp für unseren Auszug definiert haben, müssen wir auch beschreiben, wie der Client diese Daten erhält. Dies wird als Abfrage bezeichnet. Wir werden später in die Abfrage eintauchen, aber jetzt beschreiben wir, wie jemand Auszüge in unserem Muster abruft. Wenn alle unsere Auszüge angefordert werden, werden die Daten als Array zurückgegeben (als [Highlight] bezeichnet), und wenn wir einen einzelnen Auszug abrufen möchten, müssen wir die ID als Parameter übergeben.

 <code>const typeDefs = gql` type Highlight {  id: ID!  content: String!  title: String  author: String } type Query {  highlights: [Highlight]!  highlight(id: ID!): Highlight } `;</code>
Nach dem Login kopieren

In der Datei index.js können wir nun unsere Typdefinition importieren und den Apollo -Server einrichten:

 <code>const {ApolloServer } = require('apollo-server'); const typeDefs = require('./schema'); const server = new ApolloServer({ typeDefs }); server.listen().then(({ url }) => { console.log(`? Highlights server ready at ${url}`); });</code>
Nach dem Login kopieren

Wenn wir den Knotenprozess ausgeführt haben, wird die Anwendung automatisch aktualisiert und neu gestartet. Wenn nicht, npm start aus dem Projektverzeichnis im Terminalfenster den Server. Wenn wir uns das Terminal ansehen, sollten wir sehen, dass Nodemon unsere Dateien überwacht und der Server auf dem lokalen Port ausgeführt wird:

 <code>[nodemon] 2.0.2 [nodemon] to restart at any time, enter `rs` [nodemon] watching dir(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node index.js` ? Highlights server ready at http://localhost:4000/</code>
Nach dem Login kopieren

Durch den Zugriff auf die URL in einem Browser wird die GraphQL -Spielplatzanwendung gestartet, die eine Benutzeroberfläche für die Interaktion mit unserer API bietet.

GraphQL Parser

Obwohl wir unser Projekt mithilfe des ersten Modus- und Apollo -Servereinstellungen entwickelt haben, können wir noch nicht mit unserer API interagieren. Dazu werden wir den Parser vorstellen. Die Parser führen die genauen Operationen aus, die mit ihrem Namen impliziert werden. Sie analysieren die vom API -Benutzer angeforderten Daten. Wir werden diese Parser schreiben, indem wir sie zuerst in unserem Schema definieren und dann Logik in unserem JavaScript -Code implementieren. Unsere API enthält zwei Arten von Parsers: Abfrage und Mutation.

Fügen wir zunächst einige Daten hinzu, mit denen wir interagieren können. In einer Anwendung sind dies normalerweise die Daten, die wir aus der Datenbank abrufen und schreiben. Verwenden wir jedoch für unser Beispiel eine Reihe von Objekten. Fügen Sie Folgendes der Datei index.js hinzu:

 lass highlights = [
  {
    ID: '1',
    Inhalt: "Eines Tages werde ich die richtigen Worte finden, und sie werden einfach sein."
    Titel: 'Dharma Bums',
    Autor: 'Jack Kerouac'
  },
  {
    ID: '2',
    Inhalt: "In den Grenzen einer Situation gibt es Humor, Gnade und alles andere."
    Titel: 'willkürliches dummes Ziel',
    Autor: 'Tamara Shopsin'
  }
]
Nach dem Login kopieren

Abfrage

Abfrage fordert bestimmte Daten aus der API an und zeigt sie in seinem gewünschten Format an. Die Abfrage gibt dann ein Objekt zurück, das die vom API -Benutzer angeforderten Daten enthält. Eine Abfrage ändert niemals Daten; Es greift nur auf Daten zu. Wir haben zwei Fragen im Schema geschrieben. Der erste gibt eine Reihe von Auszügen zurück, und der zweite gibt einen bestimmten Auszug zurück. Der nächste Schritt besteht darin, einen Parser zu schreiben, der die Daten zurückgibt.

In der Datei index.js können wir ein resolvers -Objekt hinzufügen, das unsere Abfrage enthalten kann:

 const resolvers = {
  Abfrage: {
    Highlights: () => Highlights,
    Highlight: (Elternteil, args) => {
      return highlights.find (highlight => highlight.id === args.id);
    }
  }
};
Nach dem Login kopieren

highlights -Abfrage gibt eine vollständige Reihe von Auszugsdaten zurück. highlight -Abfrage akzeptiert zwei Parameter: parent und args . parent ist der erste Parameter für jede Graqhql -Abfrage auf dem Apollo -Server und bietet eine Möglichkeit, auf den Abfragekontext zuzugreifen. Mit dem Parameter args können wir auf Benutzer bereitgestellte Parameter zugreifen. In diesem Fall stellt der API -Benutzer id -Parameter zur Verfügung, um auf einen bestimmten Auszug zuzugreifen.

Wir können dann unsere Apollo -Server -Konfiguration aktualisieren, um den Resolver einzuschließen:

 const server = neuer Apolloserver ({typedefs, resolvers});
Nach dem Login kopieren

Nachdem wir unseren Abfrage -Parser geschrieben und den Apollo -Server aktualisiert haben, können wir jetzt die GraphQL -Playground -Abfrage -API verwenden. Um auf den GraphQL -Spielplatz zuzugreifen, besuchen Sie http://localhost:4000 in Ihrem Webbrowser.

Das Abfrageformat lautet wie folgt:

 Abfrage {
  Queryname {
      Feld
      Feld
    }
}
Nach dem Login kopieren

In diesem Sinne können wir eine Abfrage schreiben, die die ID, den Inhalt, den Titel und den Autor jeder unserer Auszüge verlangt:

 Abfrage {
  Highlights {
    Ausweis
    Inhalt
    Titel
    Autor
  }
}
Nach dem Login kopieren

Angenommen, wir haben eine Seite in der Benutzeroberfläche, auf der nur der Titel und der Autor unseres hervorgehobenen Textes aufgeführt sind. Wir müssen den Inhalt jedes Auszugs nicht abrufen. Stattdessen können wir eine Abfrage schreiben, die nur die Daten fordert, die wir benötigen:

 Abfrage {
  Highlights {
    Titel
    Autor
  }
}
Nach dem Login kopieren

Wir haben auch einen Parser geschrieben, der individuelle Kommentare durch ID -Parameter in unsere Abfrage einbezieht. Wir können das tun:

 Abfrage {
  Highlight (ID: "1") {
    Inhalt
  }
}
Nach dem Login kopieren

Mutationen

Wenn wir Daten in der API ändern möchten, verwenden wir Mutationen. In unserem Auszugsbeispiel möchten wir eine Variante schreiben, um einen neuen Auszug, einen aktualisierten vorhandenen Auszug und einen dritten zum Löschen von Auszügen zu erstellen. Ähnlich wie bei einer Abfrage sollten auch Mutationen die Ergebnisse in Form von Objekten zurückgeben, normalerweise das Endergebnis der durchgeführten Operation.

Der erste Schritt zur Aktualisierung von irgendetwas in GraphQL ist das Schreiben von Mustern. Wir können Varianten in das Schema aufnehmen, indem wir unserer Datei schema.js einen Variantenstyp hinzufügen:

 Typ Mutation {
  NewHighlight (Inhalt: String! Titel: String Autor: String): Highlight!
  UpdateHighlight (ID: ID! Inhalt: String!): Highlight!
  Deletehighlight (ID: ID!): Highlight!
}
Nach dem Login kopieren

Unsere newHighlight -Variante nimmt den erforderlichen Wert content und optionalen title und author und gibt ein Highlight zurück. updateHighlight -Variante erfordert, dass highlight id und content als Parameterwerte übergeben werden, und gibt das aktualisierte Highlight zurück. Schließlich akzeptiert die Variante deleteHighlight einen ID -Parameter und gibt das gelöschte Highlight zurück.

Nach der Aktualisierung des Musters für Mutationen können wir jetzt resolvers in der index.js -Datei aktualisieren, um diese Vorgänge auszuführen. Jede Mutation aktualisiert unser highlights -Datenarray.

 const resolvers = {
  Abfrage: {
    Highlights: () => Highlights,
    Highlight: (Elternteil, args) => {
      return highlights.find (highlight => highlight.id === args.id);
    }
  },
  Mutation: {
    NewHighlight: (Elternteil, args) => {
      const highlight = {
        ID: String (leuchtet.length 1),
        Titel: args.title || '',
        Autor: Args.Author || '',
        Inhalt: args.content
      };
      highlights.push (Highlight);
      Return Highlight;
    },
    updateHighlight: (übergeordnet, args) => {
      const index = highlights.findIndex (highlight => highlight.id === args.id);
      const highlight = {
        ID: args.id,
        Inhalt: args.content,
        Autor: Highlights [Index] .Author,
        Titel: Highlights [Index] .Title
      };
      Highlights [Index] = Highlight;
      Return Highlight;
    },
    deletehighlight: (übergeordnet, args) => {
      const deletedhighlight = highlights.find (
        highlight => highlight.id === args.id
      );
      highlights = highlights.filter (highlight => highlight.id! == args.id);
      Rückkehr DeletedHighlight;
    }
  }
};
Nach dem Login kopieren

Nach dem Schreiben dieser Mutationen können wir Mutationsdaten auf dem GraphQL -Spielplatz üben. Die Struktur der Mutation ist fast die gleiche wie die Abfrage, indem der Name der Mutation angegeben, Parameterwerte übergeben und die Rückgabe spezifischer Daten angefordert werden. Fügen wir zuerst einen neuen Auszug hinzu:

 Mutation {
  NewHighlight (Autor: "Adam Scott" Titel: "Js Everywhere" Inhalt: "GraphQl ist großartig") {
    Ausweis
    Autor
    Titel
    Inhalt
  }
}
Nach dem Login kopieren

Wir können dann eine Mutation schreiben, um den Auszug zu aktualisieren:

 Mutation {
  UPDATEHIGHIGLIGLE (ID: "3" Inhalt: "GraphQL ist rad") {
    Ausweis
    Inhalt
  }
}
Nach dem Login kopieren

Und Auszüge löschen:

 Mutation {
  deletehighlight (id: "3") {
    Ausweis
  }
}
Nach dem Login kopieren

Zusammenfassen

Glückwunsch! Sie haben jetzt erfolgreich eine GraphQL-API erstellt, die den Apollo-Server verwendet und GraphQL-Abfragen und -mutationen auf In-Memory-Datenobjekten ausführen kann. Wir haben eine solide Grundlage für die Erforschung der Welt der GraphQL -API -Entwicklung gelegt.

Hier sind einige nächste Schritte, um Ihr Niveau zu verbessern:

  • Erfahren Sie mehr über verschachtelte GraphQL -Abfragen und Mutationen.
  • Folgen Sie dem Apollo Full Stack Tutorial.
  • Aktualisieren Sie das Beispiel, um eine Datenbank wie MongoDB oder PostgreSQL hinzuzufügen.
  • Entdecken Sie mehr hervorragende CSS-Tricks-GraphQL-Artikel.
  • Verwenden Sie Ihr neu erfasstes GraphQL -Wissen, um statische Websites mit Gatsby zu erstellen.

Das obige ist der detaillierte Inhalt vonErstellen Sie GraphQL -APIs mit Knoten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

Es ist aus! Herzlichen Glückwunsch an das Vue -Team, dass es eine massive Anstrengung war und lange kommt. Alle neuen Dokumente auch.

Können Sie gültige CSS -Eigenschaftswerte aus dem Browser erhalten? Können Sie gültige CSS -Eigenschaftswerte aus dem Browser erhalten? Apr 02, 2025 pm 06:17 PM

Ich ließ jemanden mit dieser sehr legitimen Frage einschreiben. Lea hat gerade darüber gebloggt, wie Sie gültige CSS -Eigenschaften selbst aus dem Browser erhalten können. Das ist so.

Ein bisschen auf CI/CD Ein bisschen auf CI/CD Apr 02, 2025 pm 06:21 PM

Ich sage "Website" passt besser als "Mobile App", aber ich mag dieses Rahmen von Max Lynch:

Gestapelte Karten mit klebriger Positionierung und einem Schuss Sass Gestapelte Karten mit klebriger Positionierung und einem Schuss Sass Apr 03, 2025 am 10:30 AM

Neulich habe ich dieses besonders schöne Stück von der Website von Corey Ginnivan entdeckt, auf der eine Sammlung von Karten aufeinander stapelt.

Verwenden von Markdown und Lokalisierung im WordPress -Block -Editor Verwenden von Markdown und Lokalisierung im WordPress -Block -Editor Apr 02, 2025 am 04:27 AM

Wenn wir dem Benutzer direkt im WordPress -Editor Dokumentation anzeigen müssen, wie können Sie dies am besten tun?

Vergleich von Browsern für reaktionsschnelles Design Vergleich von Browsern für reaktionsschnelles Design Apr 02, 2025 pm 06:25 PM

Es gibt eine Reihe dieser Desktop -Apps, in denen das Ziel Ihre Website gleichzeitig in verschiedenen Dimensionen angezeigt wird. So können Sie zum Beispiel schreiben

So verwenden Sie CSS -Gitter für klebrige Header und Fußzeilen So verwenden Sie CSS -Gitter für klebrige Header und Fußzeilen Apr 02, 2025 pm 06:29 PM

CSS Grid ist eine Sammlung von Eigenschaften, die das Layout einfacher machen als jemals zuvor. Wie alles andere ist es eine kleine Lernkurve, aber das Gitter ist

Warum werden die lila abgeschnittenen Bereiche im Flex -Layout fälschlicherweise als 'Überlaufraum' betrachtet? Warum werden die lila abgeschnittenen Bereiche im Flex -Layout fälschlicherweise als 'Überlaufraum' betrachtet? Apr 05, 2025 pm 05:51 PM

Fragen zu lila Schrägstrichen in Flex -Layouts Bei der Verwendung von Flex -Layouts können Sie auf einige verwirrende Phänomene stoßen, wie beispielsweise in den Entwicklerwerkzeugen (D ...

See all articles