GraphQL. Hva, hvorfor, hvordan

Like dokumenter
SAS IN A SOA WORLD MARIUS SOMMERSETH TEAM LEAD TECHNICAL ARCHITECTURE

Web Services. Olav Lysne

SPARQL. Daniel Reinholdt. Trondheim Daniel Reinholdt (NTNU) SPARQL Trondheim / 17

Implementering av database og tjeneste

FS-API Status og veien videre. Kai Quale og Mario Ledinscak KDTO

IN2000. Gjennomgang av tekniske oppgaver på prøveeksamen. Erlend Stenlund og Steffen Almås + innspill fra Gaute Berge

Innholdsfortegnelse. 1. Testing Feiltesting av koden Funksjonstesting: Kilder.10

Test Beskrivelse Resultat Innhenting CBIS Programmet mottar data fra CBIS OK, men kun. Innhenting Tellus Programmet mottar data fra Tellus OK

Dataporten sikker og enkel deling av data i UH-sektoren

Grensesnittene mellom Legemiddelverket og de andre eresept-aktørene

Innledende Analyse Del 1.2

Implementering av caching ved hjelp av Spring. Christian Vestøl

Implementering av database og tjeneste

Nye muligheter i arbeidsflyt

En beskrivelse av API for innhenting av informasjon fra registeret for sentralt godkjente foretak Direktoratet for byggkvalitet

3 Filstruktur. Slik ser filstrukturen til applikasjonen ut når den er lagt ut på server eller når den er deployet.

PoC Duet. Oppfølging av sykefravær

Sikkerhet og tilgangskontroll i RDBMS-er

Læringsmål for forelesningen

Workshop NGIS API. Lars Eggan, Norconsult Informasjonssystemer desember 2014

Akseptansetest av sending og mottak Applikasjonskvittering

Gruppe prosjekt del 3. INFO134 Klientprogrammering Vår 2017 Kandidatnummer: 304, 298

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Brukerdokumentasjon. Webservices og webklient for kodeverk/ kodeverdi verifisering

Feilsøking i BO. Olav Syse, konsulent. Jan Terje Hansen, service manager. Be business intelligent

UDDI norsk katalog for registrering av tjenester (WMS, WFS, WCS, WS) i Norge digitalt

ORDBMS og OODBMS i praksis

Kravspesifikasjon. Forord

ISY Park Go og nye ISY Park. Endre Lykke, NoIS

Veilederdokumentenes forankring <UTKAST>

INF5110. Oblig 2 presentasjon

EKSAMEN DATABASER OG WEB Et maskinskrevet notat på maksimalt 2 A4-sider, satt med enkel linjeavstand og skriftstørrelse 12 (eller større).

E-post ved UiO for Systemgruppeforum. Bård H.M. Jakobsen Gruppe for drift av meldingstjenester (GMT)

API hva er det, og trenger vi det? 14. mars 2017 Asbjørn Risan, BIBSYS

Nyheter og forbedringer innen HR og Lønn. Savina Tomren, Unit4 R&D

Eventhandler Teknologi, kunst og design Høgskolen i Oslo og Akershus, våren Testrapport

Oppgave 1 (Opprett en database og en tabell)

Erlend Oftedal. Risiko og sikkerhet i IKT-systemer, Tekna

Sikkerhet i Pindena Påmeldingssystem

Pen- tes'ng av webservices. Asbjørn Reglund Thorsen Gruppe- og utviklingsleder UIO/FSAT

Agenda. Data og grenser Kontekster XSS XSS og kompliserende kontekster Injection attacks Beskyttelse OWASP

- reklamebannere mobil og tablet

6105 Windows Server og datanett

Distributed Component Object Model. Utvikling av distribuerte applikasjoner. Utvidelse av COM for støtte av distribuerte objekter

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

User Input / Output Handling. Innocent Code kap 3-4 INF-329 Øystein Lervik Larsen oysteinl@ii.uib.no 7/11-05

SuperOffice Mobil Strategi Hvordan vi har bygget pla8ormuavhengige apper. Gu;orm Nielsen Utviklingsdirektør

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Grensesnitt mot Telenor - Bredbåndsforum 11. mars Fault Management and Trouble Ticketing

Programmeringsrammeverk som kan installeres på Windows Mobiloperativsystem

IN2090 Databaser og datamodellering. 08 Typer og skranker

NKKN typeforslag versjon Definisjon av grunntypene

S y s t e m d o k u m e n t a s j o n

Kortversjon - Akseptansetest av sending Elektronisk epikrise - Den gode epikrise

Temadata i Innlandet. Generelt tilgang til og bruk av temadata Data fra Statens vegvesen. Fagdag veg, Gålå Ingar Skogli, Statens vegvesen

Programmering i C++ Løsningsforslag Eksamen høsten 2005

NCE TOURISM FJORD NORWAY. FJORDNETT INTERNETTFORUM 2012 Bergen, 12./13. juni 2012

Stikkord: Java EE, EJB, JSF, JPA, SWT, klient/tjener, Glassfish server, Application Client.

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Artist webside. Gruppe medlemmer Joakim Kartveit. Oppdragsgiver Tetriz Event & Management. Frode Mathiesen. Gry Anita Nilsen.

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

FINN.no. Driving - business growth - developer speed - employee satisfaction. by just a few hundred decisions. Cloud and Data

Grensesnittdokumentasjon for FEST

KRAVSPESIFIKASJON FOR SOSIORAMA

NSD DATABASE FOR HØGRE UTDANNING(DBH) DBH-API. Tilgang til data via API

Utrulling av sertifikater til IOS

INF Oblig 2 semantikksjekk og kodegenerering

Akseptansetest av Elektronisk rekvisisjon Klinisk kjemi

Ingen søvnløse netter

Compello Invoice Approval

Veileder for harmonisering av geografiske data

Databaser fra et logikkperspektiv

Teknisk Tips & Triks PER TORE HOFF

EXCELERATOR KENNETH TORSTVEIT. Sensitivity: Internal

Sosi GML JSON. Visdomsord fra en ikke-ekspert

Innledende Analyse Del 1: Prosjektbeskrivelse (versjon 2)

Kravspesifikasjonsrapport

Innføring av sentral lagring av FKB er et nasjonalt løft for kartbransjen

Android-Programmering. Vår 2017

Sikkerhetsvurdering av smarttelefoner Andreas Hegna, sikkerhetskonsulent

Office365 -innføring i utvalgte programmer

6105 Windows Server og datanett

Øvingsforelesning 5 Python (TDT4110)

TDT Øvingsforelesning 1. Tuesday, August 28, 12

Tilkobling og Triggere

IN2090 Databaser og datamodellering. 08 Typer og skranker

Obligatorisk Oppgave 1

Konfigurasjonsstyring, automatisering, endringskontroll og overvåking. Jarle Bjørgeengen University of Oslo / USIT

Hva er NOBIL? Hva kan det brukes til?

Dimu Multimedia Server (DMS):

Effektiv Systemadministrasjon

WMS og WFS i praksis

Spring 2017, integrasjoner og API er. Integrasjoner: Hot or not?

Sikkerhet i Pindena Påmeldingssystem

6105 Windows Server og datanett

Controller Brukerstøttedatabase Ottar Holstad/Cantor 09.

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

Geosynkronisering. Nasjonale tjenester. Kommuner GeoNorge / andre portaler. Metadata. Visning. Nedlasting. Deltakende virskomhet. Geosynkronise ring

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Transkript:

GraphQL Hva, hvorfor, hvordan Dag Olav Prestegarden BouvetOne Nord, 4. mai 2017

Ikke dette

Eller dette

Men dette

Noen problemer med web-apier i dag GraphQL som løsning Features ved GraphQL Agenda Skjemadefinisjon Spørringer Litt om servere Eksempelkode GraphiQL

I dag Mikrotjenester HTTP + JSON Kanskje noe SOAP / XML?

Facebooks kjente slagord Move fast... Kilde: Mashable.com http://mashable.com/2014/04/30/facebooks-new-mantra-move-fast-with-stability/#qr5uj19awpq7

Problemet Casen hos Facebook Mange versjoner å holde orden på Klienter med begrenset databruk Tregt nett

Begrensende klienter Mer og mer mobiltrafikk Begrensning av båndbredde

HTTP/1.X Overhead ved request/response Typisk for REST-APIer - Get bruker for å hente ID Get venner av bruker vha. ID Get posts fra bruker vha. ID Get likes fra posts vha. post-id osv.

Kjent problem for mange her Mange versjoner å holde orden på Mange klienter: Web, Android, ios, Windows Phone mm. Varierende grad av oppdateringer. Ny funksjonalitet, versjonering av API

Vanskelig å sy sammen data GET /kommuner FOR kommune IN {kommuner { GET /kommuner/{kommune.id/uttak FOR uttak IN {uttak { FOR år IN (2015, 2016, 2017) { GET /uttak/rapport/{år GET /tiltakshaver/{rapport.levertav

Alternativet? GET /rapporter/getsisteaargruppertpåkommunemedtiltakshaver Nytt krav: Alle i Sør-Trøndelag fylke men uten tiltakshaver fordi det skal offentliggjøres.

GraphQL

GraphQL Laget av Facebook 2012 - Startet og tatt i bruk i Facebook 2015 - Lansert offentlig

GraphQL Spørrespråk for APIer Typebeskrivelser Referanseimplementasjon Tooling

Features Få det du vil - klienten bestemmer selv format på returnert data Hent mange ting i hver request - server kan parallellisere og bruke sin state til å produsere data mer effektivt Beskriv mulighetene - typesystemet og skjemadefinisjoner gjør det mulig å gjøre oppslag i mulige spørringer og lage god tooling Muliggjør endring i datamodeller - man kan legge til nye felter uten å påvirke eksisterende klienter, og felter kan markers som deprecated for å skjule dem i verktøy og hindre nye konsumenter

Hvordan funker det?

Database Klienter Database GraphQL-server kode() JSON-response API

Schemas, Queries, Resolvers

Schema

Schema schema { query: Query mutation: Mutation

Schema - enkel syntaks type Query { me: Person people: [Person] winners (year: Int) winners (year: Int = 2017) user (id: ID!) type Person { name: String! type: PersonType enum PersonType { EMPLOYEE FREELANCER OTHER

Schema - basistyper type Person { id: ID name: String! age: Int ownscar: Boolean mileageperyear: Float type: MyEnum friends: [Person]! enemies: [Person!] enum MyEnum { SOMETHING ORTHEOTHER

Schema - mer Interfaces Union Types Input types

Schema - Validering Basert på typedefinisjonene Gode feilmeldinger som følge av disse

Queries

Queries - Hello World { { hello "hello": "Hello world!"

Queries - Nøstede { { hello { singular, plural "hello": { "singular": "Hello you!", "plural": "Hello everyone!"

Queries - Parametre { { hello(name: "Bouvet") "hello": "Hello Bouvet!"

Queries Videre Mutations Fragments Variabler og substitusjon typename

Schema type Query { me: Person, people( search: String, limit: Int, skip: Int): [Person] type Person { name: String, age: Int, posts: [Post], address: String Spørring { me { name Svar { "data": { "me": { "name": "Dag Olav Prestegarden"

Kjøring på serveren

Kjøring På en server Root field schema { query: Query mutation: Mutation Resolvers

Introspeksjon

Introspeksjon Kommer som følge av schema-definisjon og er en del av speccen. Tillater spørringer som f.eks. { schema {types { kind name description

GraphiQL

GraphiQL Enkel web-app som fungerer som et utforskende IDE mot GraphQL-endepunkter Innebygget i flere av rammeverkene, ellers lett å hoste ved siden av et endepunkt Gir oversikt over typer, autocompletion ved bygging av spørringer osv.

Demo Sunn og Frisk til jobben

Hvem bruker dette? og en rekke andre: http://graphql.org/users/

Hvor begynner man? Både klient- og serverimplementasjoner for en rekke språk og rammeverk Se http://graphql.org/code/ ( Spesiell merknad til PostgraphQL ) Mange tutorials og etterhvert en god del konferansevideoer o.l. på YouTube Sjekk også ut https://github.com/chentsulin/awesome-graphql

Flere ting å tenke på Servering Sikkerhet Caching Pagination Osv.

Servering Et endepunnkt, typisk /graphql GET (queries) + POST (mutations)

Autentisering Bruk GraphQL etter all autentiseringsmiddleware o.l. i stacken din. Injiser brukerinfo/claims o.l. i context som brukes av resolvers Videresend ev. nødvendig brukerinfo til backend-tjenester og business-logikk Typisk ikke 401 o.l. siden man kan ha tilgang til deler av grafen man ber etter. Ofte kan man derfor få en graf som mangler deler man ikke har tilgang til

Slicing Paginering Cursor based blir ofte brukt, og man ser derfor ofte begrepene edges, node og cursor i resultater som bruker denne typen systemer.

Ikke så enkelt å implementere automatisk browser-caching Caching Støtter enkelt caching av delobjekter på server-side for hver enkelt resolver Eksponere unik identifier for objekter til klienter for mer manuell caching i klient

Alternativer

Spørsmål? Takk for meg