Slide 1

Slide 1 text

GRAPHQL WITHIN OXID ESHOP GRAPHQL WITHIN OXID ESHOP 1

Slide 2

Slide 2 text

FLORIAN ENGELHARDT FLORIAN ENGELHARDT 2

Slide 3

Slide 3 text

HUSBAND AND DAD HUSBAND AND DAD 3

Slide 4

Slide 4 text

WHO ARE YOU? WHO ARE YOU? 4

Slide 5

Slide 5 text

GraphQL 5

Slide 6

Slide 6 text

TIME FOR THEORY TIME FOR THEORY a query language for your API ask for what you need, get exactly that get many resources in a single request describe what’s possible with a type system 6

Slide 7

Slide 7 text

START WITH A SCHEMA DEFINITION START WITH A SCHEMA DEFINITION type Query { category(id: String!): Category } type Mutation { categoryCreate(category: Category!): Category } type Category { id: ID! title: String! articles: [Article] parent: Category siblings: [Category] children: [Category] } type Article { id: ID! title: String! category: Category } 7

Slide 8

Slide 8 text

HOW TO QUERY THAT HOW TO QUERY THAT { query { category(id: "id-of-category") { id title children { id title } } } } 8

Slide 9

Slide 9 text

WHAT DO YOU GET? WHAT DO YOU GET? { "data": { "category": { "id": "943a9ba3050e78b443c16e043ae60ef3", "title": "Kiteboarding", "children": [ { "id": "0f41a4463b227c437f6e6bf57b1697c4", "title": "Trapeze" }, { "id": "0f4f08358666c54b4fde3d83d2b7ef04", "title": "Kiteboards" } ] } } } 9

Slide 10

Slide 10 text

10

Slide 11

Slide 11 text

GRAPHQLITE GRAPHQLITE Create a complete GraphQL API by simply annotating your PHP classes — GraphQLite docs 11

Slide 12

Slide 12 text

BASIC EXAMPLE - CONTROLLER BASIC EXAMPLE - CONTROLLER class CategoryController { /** * @Query() */ public function category(string $id): Category { // Some code that looks for a category and returns it. } } 12

Slide 13

Slide 13 text

BASIC EXAMPLE - TYPE BASIC EXAMPLE - TYPE /** * @Type() */ class Category { /** * @Field() */ public function getTitle(): string { return $this->title; } // ... } 13

Slide 14

Slide 14 text

BASIC EXAMPLE - THE SCHEMA BASIC EXAMPLE - THE SCHEMA type Query { category(id: String!): Category } type Category { title: String! } 14

Slide 15

Slide 15 text

BASIC EXAMPLE - QUERY BASIC EXAMPLE - QUERY { query { category (id: "42") { name } } } 15

Slide 16

Slide 16 text

HOWTO GET THIS RUNNING IN OXID? HOWTO GET THIS RUNNING IN OXID? 16

Slide 17

Slide 17 text

OXID-ESALES/GRAPHQL-BASE OXID-ESALES/GRAPHQL-BASE bootstrap GraphQLite auth using JWT 17

Slide 18

Slide 18 text

HOWTO USE THIS IN MY MODULE? HOWTO USE THIS IN MY MODULE? 18

Slide 19

Slide 19 text

HOWTO USE THIS IN MY MODULE? HOWTO USE THIS IN MY MODULE? create a namespace mapper class 18

Slide 20

Slide 20 text

HOWTO USE THIS IN MY MODULE? HOWTO USE THIS IN MY MODULE? create a namespace mapper class tag this class graphql_namespace_mapper in services.yaml 18

Slide 21

Slide 21 text

HOWTO USE THIS IN MY MODULE? HOWTO USE THIS IN MY MODULE? create a namespace mapper class tag this class graphql_namespace_mapper in services.yaml create a permission provider class 18

Slide 22

Slide 22 text

HOWTO USE THIS IN MY MODULE? HOWTO USE THIS IN MY MODULE? create a namespace mapper class tag this class graphql_namespace_mapper in services.yaml create a permission provider class tag this class graphql_permission_provider in services.yaml 18

Slide 23

Slide 23 text

DEMO TIME! DEMO TIME! 19

Slide 24

Slide 24 text

ROADMAP - BUSINESS ROADMAP - BUSINESS Queries, mutations and types for Catalog User (Account) Checkout 20

Slide 25

Slide 25 text

ROADMAP - TECH ROADMAP - TECH GraphQLite v4 Caching (and cache invalidation ) 21

Slide 26

Slide 26 text

22

Slide 27

Slide 27 text

FURTHER READINGS FURTHER READINGS GraphQL GraphQLite oxid-esales/graphql-base oxid-esales/graphql-example oxid-esales/graphql-developer dotbox.org @realFlowControl 23