In dit artikel zal ik u doorsturen door het proces van het maken van een serverloze GraphQL API met TypeScript, AWS Lambda en Apollo Server.
Serverloze Computen
Serverloze computen is een uitvoeringsmodel van cloudcomputing waarbij cloudproviders automatisch de infrastructuur voor het uitvoeren van applicaties beheren. In dit model schrijven ontwikkelaars code, en de cloudprovider zorgt ervoor dat de servers worden uitgevoerd, schaalbaar zijn en worden onderhouden, waardoor ontwikkelaars geen zorgen hoeven te maken over serverbeheer, infrastructuurprovisie of schaling. Het begrip “serverloos” betekent niet dat er geen servers betrokken zijn, maar juist dat de taken rond serverbeheer voor ontwikkelaars abstract zijn. AWS Lambda is een serverloze compute-dienst van Amazon Web Services (AWS) die u toelaat om code uit te voeren zonder het in te stellen of te beheren van servers
GraphQL
GraphQL is een querytaal voor API’s en een runtime voor het uitvoeren van deze queries. Het laat clients toe precies de data die ze nodig hebben te vragen, waardoor het efficiënter is vergeleken met REST, dat mogelijk data overvordert of onvoldoende haalt. Met GraphQL kunnen clients de vorm en structuur van de reactie specificeren, meerdere resources in één aanvraag op te halen. Deze flexibiliteit verbeterd de prestaties en reduceert het netwerkoverhead. GraphQL is sterk typerend, met een schema dat beschikbare typen en bewerkingen definieert. Het wordt breed gebruikt in moderne applicaties om de communicatie tussen de front end en back end te optimaliseren, waardoor de data management meer reagerend en efficiënter wordt.
Apollo Server
Het is een populair, opensourceserver voor GraphQL die ontwikkelaars helpt een GraphQL-API gemakkelijk te maken. Het simplificeert het proces van het bouwen van een robuust en scalabel GraphQL-API door schema-definitie, query-uitvoering en response-indeling te behandelen. Apollo Server ondersteunt functies zoals gegevens ophalen, cachen en authenticatie, waardoor het geschikt is voor moderne toepassingen. Het werkt zonder problemen met verschillende gegevensbronnen, inclusief REST-API’s, databases en microservices. Met ingebouwde tools voor prestatieschermings en foutafhandeling is Apollo Server vaak gebruikt om de backend-ontwikkeling te streamlineren, waardoor efficientere en flexibelere communicatie tussen clients en servers mogelijk is in GraphQL-omgevingen.
Waarom TypeScript?
Het is een superset van JavaScript dat statische typen toegevoegd heeft aan de taal. Het helpt fouten tijdens ontwikkeling te vangen, verbetert de leesbaarheid van de code en verbetert de refactoring. door typeveiligheid en ondersteuning van hulpprogrammas te bieden, maakt TypeScript meer onderhoudsvriendelijke en scalabele applicaties mogelijk, waardoor het geschikt is voor grote projecten of teams.
Waarom vind ik serverloos en GraphQL zo goed samenwerken (of “Een liefdesverhaal in code”)
- Geoptimaliseerde resourcegebruik: GraphQL’s precieze gegevensophaling past perfect bij het serverloze betaalmodel per gebruik, waardoor efficient gebruik van resources wordt gegarandeerd.
- Gemakkelijke backend: Serverloze functies kunnen GraphQL-resolvers efficiënt afhandelen, waardoor de backend-architectuur wordt gestreamlineerd.
- Verbeterde prestaties: GraphQL’s vermogen om gegevensoverhead te verminderen resulteert in sneller toepassingen, vooral bij combinatie met een serverloze architectuur.
- Scalabiliteit: Beide technologieën zijn uitstekend in staat om verschillende belastingen te behandelen, waardoor de combinatie hoog scalabel is.
- Kosteneffectief: Het op betaalbasis model van serverloze computing, in combinatie met de efficiente gegevensoverdracht van GraphQL, kan tot significante kostenbesparingen leiden.
“De combinatie van serverloos en GraphQL maakt snel de ontwikkeling van schaalbare en efficiënte API’s mogelijk. Het is een krachtige duo dat de ontwikkelingstijd en de operationele kosten significant kan verminderen.” – Nader Dabit, “Full Stack Serverless“
Hieronder volgt de stap-voor-stapgids voor het implementeren van een service met GraphQL in AWS Lambda.
- Stap 1: Initieer een nieuw TypeScript project en installeer de afhankelijkheden.
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
- Stap 2: Definiëer het GraphQL schema met de noodzakelijke elementen.
import { gql } from 'apollo-server-lambda';
export const typeDefs = gql`
type Query {
auto: String
}
type Mutation {
sayAuto(name: String!): String
}
`;
- Stap 3: Implementeren resolvers:
export const resolvers = {
Query: {
auto: () => 'Hello from serverless GraphQL!',
},
Mutation: {
sayAuto: (_: any, { name }: { name: string }) => `Hello, ${name}!`,
},
};
- Stap 4: Maak de 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();
- Stap 5: Configureer serverloze deploy. Maak een
serverless.yml
bestand:
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
U kunt de code direct in AWS Lambda schrijven (Snelle Hello World) en goede deployeringsopties gebruiken zoals CDK of Terraform. Aangezien zowel serverloze computen als GraphQL doorgaan met evolueren, kunnen we erop verwachten dat nog krachtiger tools en praktijken opduiken.
Conclusie
door serverloze GraphQL te aanvaarden, kunnen ontwikkelaars eenvoudig schaalbare API’s creëren die precies waarvoor de klanten nodig hebben. Het is als of je een kristalbol hebt dat altijd precies weet welke gegevens te halen en schaalbaar te maken.
Source:
https://dzone.com/articles/serverless-computing-and-graphql