In diesem Artikel erläutere ich Ihnen den Prozess der Erstellung eines serverlosen GraphQL-APIs mit TypeScript, AWS Lambda und Apollo Server.
Serverloser Rechnung
Serverloser Rechnung ist ein Cloudcomputing-Ausführungsmodell, bei dem Cloudanbieter automatisch die Infrastruktur für die Ausführung von Anwendungen verwalten. In diesem Modell schreiben Entwickler Code und der Cloudanbieter kümmert sich um die Ausführung, Skalierung und Wartung der Server, was bedeutet, dass Entwickler sich nicht um Serververwaltung, Infrastrukturbereitstellung oder Skalierung kümmern müssen. Der Begriff „serverlos“ bedeutet nicht, dass es keine Server gibt, sondern dass die Serververwaltungsaufgaben von Entwicklern abstraktiert sind. AWS Lambda ist ein serverloser Rechnungsdienst von Amazon Web Services (AWS), der es Ihnen erlaubt, Code ohne Serverbereitstellung oder -verwaltung auszuführen.
GraphQL
GraphQL ist eine Abfragesprache für APIs und eine Laufzeitumgebung für die Ausführung dieser Abfragen. Es ermöglicht Clients, exakt den erforderlichen Daten zuzugriffen, was sie im Vergleich zu REST effizienter macht, der Daten möglicherweise über- oder unterfordern kann. Mit GraphQL können Clients die Form und Struktur der Antwort definieren, mehrere Ressourcen in einem einzigen Request abrufen. Diese Flexibilität verbessert die Leistung und reduziert die Netzwerklast. GraphQL ist stark typisiert, mit einem Schema, das verfügbare Typen und Operationen definiert. Es wird in modernen Anwendungen breit verwendet, um die Kommunikation zwischen Frontend und Backend zu optimieren, was eine responsivere und effizientere Datenverwaltung ermöglicht.
Apollo Server
Es ist eine populäre, quelloffene GraphQL-Server-Lösung, die Entwicklern die Erstellung einer GraphQL-API mühelos erleichtert. Sie vereinfacht den Prozess der Erstellung eines robusten und skalierbaren GraphQL-APIs, indem sie die Definition des Schemas, die Ausführung von Abfragen und die Formatierung der Antworten verwaltet. Apollo Server unterstützt Funktionen wie Datenabruf, Caching und Authentifizierung, macht es somit für moderne Anwendungen sehr adaptabel. Es arbeitet problemlos mit verschiedenen Datenquellen, einschließlich REST-APIs, Databases und Microservices. Mit integrierten Tools für Leistungsüberwachung und Fehlerbehandlung ist Apollo Server häufig zur Automatisierung der Backend-Entwicklung verwendet, bietet effiziente und flexible Kommunikation zwischen Clients und Servern in GraphQL-Umgebungen.
Warum TypeScript?
Es ist ein Übersetzer von JavaScript, der den Sprachkern um statische Typisierung erweitert. Es hilft bei der Erkennung von Fehlern während der Entwicklung, verbessert die Lesbarkeit des Codes und erleichtert den Refactoring. Durch die bereitstellte Typensicherheit und die Unterstützung von Werkzeugen ermöglicht TypeScript maintainable und skalierbare Anwendungen, macht es somit für große Projekte oder Teams ideal.
Warum finde ich Serverlos und GraphQL so gut zusammen zu arbeiten (oder „Eine Liebesgeschichte in Code“)
- Optimierte Ressourcen Nutzung: Die präzise Datenabrufung von GraphQL passt perfekt zum serverlosen Pauschalpreismodell, sichert effiziente Ressourcen Nutzung.
- Vereinfachtes Backend: Serverlose Funktionen können GraphQL-Resolver effizient verwalten, was die Backend-Architektur vereinfacht.
- Verbesserte Leistung: Die Fähigkeit von GraphQL, Datenübertragungsaufwand zu reduzieren, führt zu schnelleren Anwendungen, insbesondere in Kombination mit einer serverlosen Architektur.
- Skalierbarkeit: Beide Technologien sind hervorragend in der Handhabung wechselnder Lasten, was zu einer hohen Skalierbarkeit der Kombination führt.
- Kosteneffiziente: Das Modell „Pay-as-you-go“ von serverless Computing in Kombination mit der effizienten Datenübertragung von GraphQL kann zu erheblichen Kosteneinsparungen führen.
„Die Kombination von serverless und GraphQL ermöglicht die schnelle Entwicklung skalierbarer und effizienter API. Es ist ein kraftvolles Team, das die Entwicklungszeit und die Betriebskosten erheblich reduzieren kann.“ – Nader Dabit, „Full Stack Serverless„
Unten ist der Schritt-für-Schritt-Leitfaden zur Bereitstellung eines Dienstes mit GraphQL in AWS Lambda.
- Schritt 1: Erstellen Sie ein neuen TypeScript-Projekt und installieren Sie die Abhängigkeiten.
mkdir serverless-graphql-api
cd serverless-graphql-api
npm init -y
npm install typescript @types/node --save-dev
npx tsc --init
npm install apollo-server-lambda graphql @types/aws-lambda
npm install --save-dev serverless-offline
- Schritt 2: Definieren Sie das GraphQL-Schema mit den notwendigen Elementen.
import { gql } from 'apollo-server-lambda';
export const typeDefs = gql`
type Query {
auto: String
}
type Mutation {
sayAuto(name: String!): String
}
`;
- Schritt 3: Implementieren Sie Resolver:
export const resolvers = {
Query: {
auto: () => 'Hello from serverless GraphQL!',
},
Mutation: {
sayAuto: (_: any, { name }: { name: string }) => `Hello, ${name}!`,
},
};
- Schritt 4: Erstellen Sie den Lambda-Handler:
import { ApolloServer } from 'apollo-server-lambda';
import { typeDefs } from './schema';
import { resolvers } from './resolvers';
const server = new ApolloServer({
typeDefs,
resolvers,
});
export const graphqlHandler = server.createHandler();
- Schritt 5: Konfigurieren Sie den serverless-Deployment. Erstellen Sie eine
serverless.yml
-Datei:
service: serverless-graphql-api provider: name: aws runtime: nodejs16.x stage: dev region: us-east-1 functions: graphql: handler: handler.graphqlHandler events: - http: path: graphql method: post - http: path: graphql method: get plugins: - serverless-offline
Sie können direkt in AWS Lambda Code schreiben (schnelles Hello World) und sinnvolle Deployment-Optionen wie CDK oder Terraform verwenden. Angesichts der Weiterentwicklung sowohl von serverless Computing als auch von GraphQL können wir erwarten, dass sich weitere leistungsstarke Tools und Praktiken etablieren werden.
Fazit
Durch die Anerkennung von serverless GraphQL können Entwickler APIs schaffen, die mühelos skalieren und genau das liefern, was die Kunden benötigen. Es ist wie ein Kristallball, der immer genau weiß, welche Daten abgerufen und skaliert werden sollten.
Source:
https://dzone.com/articles/serverless-computing-and-graphql