Top Banner
40

StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Jan 23, 2018

Download

Technology

silverstripe
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 2: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Head less

SilverStripeBuilding a modern, API-driven application in SS4

Aaron Carlino

@_UncleCheese_

24 November 2017

Page 3: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 4: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

• This? Seriously?

• Most popular: unclecheese/send-all-errors-to-ingo’s-inbox

• It was a café.

• Also a café. They were all cafés.

• It's now a café.

• "Beast" = wind.

• No feature requests please.

About Me

Page 5: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

An easy target.

Page 6: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 7: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 8: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 9: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 10: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Strudel.jsAurelia

Chaplin.js

Ember.js

Vue.jsInferno

Cappuccino

Maputo

Mojito

Meteor

RxJS

Fisk

Backbone.js

Tektite

ReactWakanda

Page 11: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Strudel.jsAurelia

Chaplin.js

Ember.js

Vue.jsInferno

Cappuccino

Maputo

Mojito

Meteor

RxJS

Fisk

Backbone.js

Tektite

ReactWakanda

Page 12: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Tektite

Maputo

Fisk

* As of 2017-23-11 21:00:00 UTC

Page 13: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

“Why isn’t <module> in core?”

Page 14: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 15: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GraphQL + ReactJSOur big bet:

Page 16: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GraphQL + ReactJSOur big bet:

Page 17: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

What is GraphQL?

Page 18: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

What is GraphQL?

Page 19: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GraphQL is a query

language for your API.

Page 20: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4
Page 21: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GET /api/v1/blogs?memberID=5

Page 22: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GET /api/v1/blog/5

Page 23: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GET /api/v1/blogs?include=title,content

GET /api/v1/blogs?include=title,comments.count

GET /api/v1/blogs?include=title,comments.latest???

Params to the rescue

Page 24: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GET /api/v1/blogs_with_title_and_teaser

GET /api/v1/blog_summary_with_comment_count

GET /api/v1/blogs_with_latest_comment

Custom endpoints

Page 25: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

This is no longer a service.

Page 26: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

This is an implicit dependency

of a view.

Page 27: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

My Grocery Store

Meat Dairy Produce American

Page 28: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

My Grocery Store

Meat Dairy Produce American

Page 29: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

My Grocery Store

Meat Dairy Produce American

Page 30: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

My Grocery Store + GraphQL

My meal

Page 31: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

{

blogs {

title

}

}

Page 32: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

{

blogs (memberID: 5) {

title

content

author {

firstName

surname

}

comments {

pageInfo {

totalCount

}

}

tags {

title

}

}

}

Page 33: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

The server offers everything it has.

The client takes just what it wants.

Page 34: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

GraphQL is strongly typed.

Page 35: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

{

blogs (memberID: 5) {

title

content

author {

firstName

surname

}

comments {

pageInfo {

totalCount

}

}

tags {

title

}

}

}

ListOf: BlogType

AuthorType

String

CommentType

Int

TagType

Page 36: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Let’s build some stuffBefore this shit is deprecated.

Page 37: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Our Backend

$ composer create-project silverstripe/recipe-core graphql-server

$ cd graphql-server/

$ composer require silverstripe/graphql

$ composer require silverstripe/graphql-devtools

$ composer require silverstripe/versioned

$ composer require silverstripe/sqlite3:dev-master

$ vendor/bin/sake dev/build flush=1

Page 38: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Our Frontend

$ create-react-app dogapp

$ cd dogapp/

$ yarn add graphql graphql-tag material-ui@next

material-ui-icons@next prop-types

apollo-client apollo-cache-inmemory

apollo-link-http react-apollo

Page 39: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

Thank you.

Aaron Carlino

@_UncleCheese_

24 November 2017

Page 40: StripeCon New Zealand 2017 - Aaron Carlino - Building a modern, API-driven application in SS4

FiskQLLook what just “rodent” to town.