Python and GraphQL Alec MacQueen Software Engineer @ Administrate - - PowerPoint PPT Presentation

python and graphql
SMART_READER_LITE
LIVE PREVIEW

Python and GraphQL Alec MacQueen Software Engineer @ Administrate - - PowerPoint PPT Presentation

Python and GraphQL Alec MacQueen Software Engineer @ Administrate Alec MacQueen - @macqueenism - Europython 2018 Alec MacQueen - @macqueenism - Europython 2018 vs Alec MacQueen - @macqueenism - Europython 2018 Maintainability Coupling


slide-1
SLIDE 1

Alec MacQueen - @macqueenism - Europython 2018

Python and GraphQL

Alec MacQueen Software Engineer @ Administrate

slide-2
SLIDE 2

Alec MacQueen - @macqueenism - Europython 2018

slide-3
SLIDE 3

Alec MacQueen - @macqueenism - Europython 2018

vs

slide-4
SLIDE 4

Alec MacQueen - @macqueenism - Europython 2018

  • Maintainability
  • Coupling of frontend and backend
  • Cognitive load
  • Not enough thought given to our API
slide-5
SLIDE 5

Alec MacQueen - @macqueenism - Europython 2018

What is GraphQL?

slide-6
SLIDE 6

Alec MacQueen - @macqueenism - Europython 2018

GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data.

graphql.org

slide-7
SLIDE 7

Alec MacQueen - @macqueenism - Europython 2018

Not language specific

slide-8
SLIDE 8

Alec MacQueen - @macqueenism - Europython 2018

A single endpoint

slide-9
SLIDE 9

Alec MacQueen - @macqueenism - Europython 2018

Get what you want

slide-10
SLIDE 10

Alec MacQueen - @macqueenism - Europython 2018

query { event(eventId:"1") { title description talks { name } } } { "data": { "event": { "title": "Europython 2018", "description": "The 2018 European Python conference held in Edinburgh", "talks": [ { "name": "Python and GraphQL" }, { "name": "Hi my name is README" } ] } } }

slide-11
SLIDE 11

Alec MacQueen - @macqueenism - Europython 2018

/api/events/1 { "prices": [ { "price_level": { "expiry_offset": null, "description": null, "is_deleted": false, "id": 1, "name": "Normal" }, "event_id": 1, "region": { "name": "Vancouver", "default_tax": null, "countries": [ ], "invoice_numbering": "region", "default_tax_id": null, "company": { "registration_numbers": "", "code": "TTW", "name": "The Training World", "settings": { "time_format": "H:i", "date_format": "Y-m-d", "locale": "en_US", "week_starts": 1, "non_working_days": "0,6" }, "bank_details": null, "currency": { "code": "GBP", "name": "Pounds Sterling", "symbol": "£", "html_code": "£", "id": 1, "is_base": false }, "id": 1, "currency_code": "GBP", "account_id": 1 }, "company_id": 1, "mapped_countries": [ { "region_code": "CA", "id": "CA", "name": "Canada" } ], "is_hidden": false, "id": "VC" }, "id": 1, "currency": { "code": "USD", "name": "U.S. Dollars", "symbol": "$", "html_code": "$", "id": 2, "is_base": false }, "price": 1200.0 } ]

slide-12
SLIDE 12

Alec MacQueen - @macqueenism - Europython 2018

Mutations

slide-13
SLIDE 13

Alec MacQueen - @macqueenism - Europython 2018

mutation { account { create(input: { name: "New Account", emailAddress: "test@test.co" }) { account { name emailAddress } } } } { "data": { "account": { "create": { "account": { "name": "New Account", "emailAddress": "test@test.co" } } } } }

slide-14
SLIDE 14

Alec MacQueen - @macqueenism - Europython 2018

Strongly typed

slide-15
SLIDE 15

Alec MacQueen - @macqueenism - Europython 2018

Let’s build an API

slide-16
SLIDE 16

Alec MacQueen - @macqueenism - Europython 2018

github.com/APIs-guru/graphql-voyager

slide-17
SLIDE 17

Alec MacQueen - @macqueenism - Europython 2018

GraphQL-Core

github.com/graphql-python/graphql-core

slide-18
SLIDE 18

Alec MacQueen - @macqueenism - Europython 2018

slide-19
SLIDE 19

Alec MacQueen - @macqueenism - Europython 2018

slide-20
SLIDE 20

Alec MacQueen - @macqueenism - Europython 2018

github.com/graphql-python/flask-graphql

slide-21
SLIDE 21

Alec MacQueen - @macqueenism - Europython 2018

Graphene

github.com/graphql-python/graphene

slide-22
SLIDE 22

Alec MacQueen - @macqueenism - Europython 2018

slide-23
SLIDE 23

Alec MacQueen - @macqueenism - Europython 2018

slide-24
SLIDE 24

Alec MacQueen - @macqueenism - Europython 2018

Graphqlize

slide-25
SLIDE 25

Alec MacQueen - @macqueenism - Europython 2018

slide-26
SLIDE 26

Alec MacQueen - @macqueenism - Europython 2018

slide-27
SLIDE 27

Alec MacQueen - @macqueenism - Europython 2018

Can I use it? Not yet.

bit.ly/graphqlize

slide-28
SLIDE 28

Alec MacQueen - @macqueenism - Europython 2018

inspect typing

slide-29
SLIDE 29

Alec MacQueen - @macqueenism - Europython 2018

GraphiQL

github.com/graphql/graphiql

slide-30
SLIDE 30

Alec MacQueen - @macqueenism - Europython 2018

API First

slide-31
SLIDE 31

Alec MacQueen - @macqueenism - Europython 2018

Upfront Design

slide-32
SLIDE 32

Alec MacQueen - @macqueenism - Europython 2018

Release publicly, regularly

slide-33
SLIDE 33

Alec MacQueen - @macqueenism - Europython 2018

Dogfooding

slide-34
SLIDE 34

Alec MacQueen - @macqueenism - Europython 2018

Documentation

slide-35
SLIDE 35

Alec MacQueen - @macqueenism - Europython 2018

  • Maintainability
  • Coupling of frontend and backend
  • Cognitive load
  • Not enough thought given to our API
slide-36
SLIDE 36

Alec MacQueen - @macqueenism - Europython 2018

Thank you

All artwork used in this talk was designed by Vitaly Gorbachev from flaticon.com

@macqueenism