Hvad er GraphQL?
GraphQL er en alternativ måde at kommunikere med API'er på, som er særligt velegnet til komplekse datastrukturer og til at bygge interfaces ovenpå dem. I modsætning til at behandle data som separate, selvstændige enheder viser GraphQL, hvordan dataelementer hænger sammen og relaterer til hinanden, hvilket gør det nemt at anmode om og modtage information.
Tænk på GraphQL som et forespørgselssprog, der lader dig tale med API'et, som om du talte direkte med databasen. GraphQL giver dig mulighed for at komme så tæt på databasen som muligt og vælge præcis, hvilke data du vil have og hvordan du får dem — med en massiv performancefordel.
GraphQL blev skabt af Facebook for at løse problemet med at skalere med komplekse datastrukturer. Som følge af deres succesfulde adoption har flere og flere virksomheder indset fordelene ved GraphQL til deres API'er.
Kender du allerede REST? GraphQL føles velkendt.
GraphQL API'er er nemmere at arbejde med, end du måske tror. Hvis du er vant til REST API'er, sådan oversættes kernebegreber fra REST til GraphQL.
| Funktion↕ | REST↕ | GraphQL↕ |
|---|---|---|
| Endpoint | Anmodninger sendes til flere endpoints for forskellige handlinger | Alle anmodninger sendes til et enkelt endpoint (f.eks. /graphql) |
| Datahentning | Brug GET-metoder på specifikke endpoints for at hente data | Brug queries til at anmode om præcis de data, der er brug for, og reducere over- eller under-hentning |
| Datamodifikation/handlinger | Brug HTTP-metoder som POST, PUT, PATCH eller DELETE til at ændre eller behandle data. | Brug mutations til at udføre operationer (f.eks. oprette parter, beregne landed costs) |
| Svarformat | Faste svarformater returnerer alle foruddefinerede felter, uanset om de er nødvendige | Fleksible svar giver mulighed for at specificere præcis de felter, der skal inkluderes, og reducere unødvendig dataoverførsel (Hvis denne fleksibilitet føles kompliceret, brug blot de forudskrevne query-eksempler i vores dokumentation for en REST-lignende oplevelse) |
| Dataforbindelse | Flere anmodninger kræves ofte for at hente relaterede data | Indlejrede queries gør det muligt at hente relaterede data i én anmodning (f.eks. party-detaljer og forsendelsesvarer sammen). Brugere kan også bygge workflows til at håndtere flere mutations i én GraphQL-anmodning, hvilket reducerer kompleksitet og forbedrer effektiviteten |
Fordele ved GraphQL
Hurtigere svar
GraphQL giver hurtigere svar gennem præcis datahentning, brug af et enkelt endpoint og forbedrede muligheder for batching og caching.
Præcis datahentning
En almindelig udfordring med REST er over- eller under-hentning af data — enten at få for meget unødvendig information eller ikke nok af det, der er brug for, på én gang. GraphQL eliminerer dette ved at tillade anmodninger om præcis det, der er brug for — hverken mere eller mindre. Denne specificitet forbedrer ikke kun performance, men forenkler også processen for dem, der interagerer med API'et, og gør systemet mere effektivt og brugervenligt.
Eksempler på, hvordan dette er nyttigt:
- Det giver frontend-udviklere mulighed for at hente præcis de data, de har brug for til deres UI-komponenter, hvilket reducerer antallet af round trips til serveren og forbedrer performance.
- Forestil dig, at du vil have en HS-kode-klassificering, cartonization, forsendelsesrating og et landed cost-tilbud på varer i en checkout. Hvis du er integreret via GraphQL API, kan du foretage ét kald med de nødvendige workflows for at få alt, du har brug for (og intet, du ikke har brug for), i ét svar. Med REST API'er skulle du først kalde Classify REST API, derefter Rating REST API separat og til sidst indsætte klassificering og forsendelsesrating i dit tredje kald til Landed Cost REST API. Alle disse REST API'er returnerer al information, de kan, hvilket kræver, at du parser svaret for at finde de data, du har brug for. Denne tidsbesparelse har betydning for at returnere en komplet landed cost hurtigt, før køberen forlader siden.
Enkelt endpoint
GraphQL API'er har typisk ét endpoint, i modsætning til REST API'er, som ofte har flere endpoints for forskellige ressourcer og handlinger. Det gør API'et enklere at administrere og forstå.
Batching og caching
GraphQL's evne til at batch queries og understøttelse af caching-strategier giver betydelige performanceforbedringer. Disse funktioner reducerer belastningen på netværk og servere, hvilket giver hurtigere og mere pålidelige interaktioner for brugerne.
Veldefinerede skemaer
GraphQL API'er er baseret på et stærkt typet skema. Dette skema definerer strukturen af de tilgængelige data og de operationer, der kan udføres. Det giver klarhed over, hvilke data der er tilgængelige, og hvordan de tilgås, hvilket kan forbedre udviklerproduktivitet og reducere fejl. Frontend-teams kan f.eks. udforske grafen for at få præcis det, de har brug for, i stedet for at vente på et nyt REST-endpoint.
Mulighed for at forbedre uden at bryde eksisterende klienter
Tilføjelse af nye funktioner eller ændring af eksisterende i GraphQL forstyrrer ikke nuværende integrationer takket være den fleksible query-struktur. Det sikrer, at forbedringer kan foretages uden at bryde kompatibilitet med eksisterende klienter.
Opdateret dokumentation
Takket være GraphQL's introspection-funktion genereres og opdateres dokumentation automatisk ved hver ændring. Det sikrer, at al information til udviklere er aktuel, hvilket reducerer integrationsproblemer og supporthenvendelser relateret til forældet dokumentation — en udfordring, REST API-dokumentation ofte står over for.
Gennemgå vores GraphQL-dokumentation og vores REST-dokumentation for at se forskellen.
En analogi
Forestil dig, at du er på en restaurant med en menu, der lader dig bestille retter præcis, som du vil have dem, sammenlignet med en anden restaurant, hvor du kun kan vælge fra faste menuer. GraphQL er som den første restaurant:
- Få præcis det, du vil have: Med GraphQL kan du anmode om præcis de data, du har brug for — hverken mere eller mindre. Forestil dig, at du kun vil have navn og pris på en ret, ikke hele ingredienslisten. Med REST API'er skal du hente hele retdetaljerne og ignorere de dele, du ikke har brug for.
- Sammensæt en skræddersyet ret: Vores GraphQL API kan nemt kombineres til mere skræddersyede løsninger, ligesom en buffet-restaurant, hvor du kan skabe en unik ret præcis som du har brug for den, med ingredienser, de allerede har. En REST API er derimod som en bageri med færdiglavede varer pakket i kurve — du kan kun bestille det, der allerede er lavet, og du kan ikke vælge kun at tage den del, du vil have med hjem.
- Mindre ventetid: Da du kan få al den information, du har brug for, i én anmodning, er det som at bede tjeneren bringe forret, hovedret og dessert på én gang i stedet for at vente mellem retterne. De fleste REST API'er kræver, at du sender flere anmodninger for at få forskellige informationer.
- Nemt at ændre bestillinger: Hvis appens databehov ændrer sig, gør GraphQL det nemmere at justere. Du ændrer bare query'en for det, du har brug for. Med REST skal du måske vente på, at køkkenet (backend) laver en ny ret (endpoint) til menuen, hvilket tager længere tid.
GraphQL giver mere fleksibilitet, effektivitet og enkelhed til at hente data end REST API'er — især når dine behov ændrer sig eller vokser.
Sådan bruger Zonos GraphQL
Under moderniseringen af vores platform de seneste par år har Zonos valgt at bygge ny funktionalitet med GraphQL til vores API i stedet for REST. Vi gjorde det, fordi vores data er komplekse og sammenhængende — ligesom de data, der fik Facebook til at skabe GraphQL. Denne kompleksitet gør det udfordrende at bygge skalerbare REST API'er, fordi måden, udviklere skal hente og bruge data på, varierer dramatisk mellem implementeringer, og REST er ikke fleksibelt.
GraphQL løser dette problem elegant ved at lade udviklere, der implementerer vores API, vælge præcis, hvilke data de vil have og hvordan de får dem. Det gør det muligt at passe ind i deres workflows uden, at Zonos skal lave tilpasset arbejde (mens de venter) for hver situation.
Den kombinerede effekt af GraphQL og moderniseringerne i vores platform har gjort vores API mere performant, gjort integration af Zonos i dine systemer hurtigere og gjort det muligt for Zonos at levere nye funktioner hurtigere.
Bedre funktioner
Zonos udvikler løbende nye funktioner, og GraphQL er den første (og som regel eneste), der modtager disse opdateringer. Vores REST API'er betragtes derimod som end-of-life og kan ikke tilgå mange af vores nye funktioner.
Eksempler på funktioner begrænset til GraphQL:
- Inclusive pricing
- Labels API
- New Checkout and Hello
- Box sizes in API response
- Dashboard reporting
- Ability to request a DDP quote if possible, but still return a DDU quote if DDP is unavailable to that country with that service level
- Detailed breakdown of duties, taxes, and fees (item-level information, specific fees)—Dashboard is powered by GraphQL and shows this data for all stores, but the REST API response does not include this level of detail
- Test mode (coming soon)
Hvorfor GraphQL
Opdag, hvorfor vi anbefaler integration via GraphQL frem for REST.
Hos Zonos tilbyder vi to hovedtyper API'er til integration: GraphQL og REST. Selvom REST API'er har eksisteret længere og kan være mere velkendte for mange, er vi gået over til GraphQL for at give mere fleksibilitet og hurtigere innovation. Selvom begge stadig understøttes, forklarer denne guide, hvorfor GraphQL ikke kun er fremtiden for vores integrationer, men også fremtiden for integrationer generelt — og et mere kraftfuldt værktøj til at imødekomme dine behov i dag.