Open-Source
Released 2015 from Facebook
and how it differs from REST?
type Pizza {
id: ID!
name: String!
toppings: [Topping!]!
}
type Topping {
id: ID!
name: String!
}
type Query {
getPizzaById(pizzaId: ID!): Pizza!
getToppingById(toppingId: ID!): Topping!
getPizzaByName(pizzaName: ID!): Pizza!
getToppingByName(toppingName: ID!): Topping!
listPizza: [Pizza]!
listTopping: [Topping]!
}
{
listPizza {
id
name
}
}
{
getPizzaById(pizzaId: "0") {
id
name
toppings {
name
}
}
}
type Mutation {
createPizza(createPizzaDto: ChangePizzaDto): Pizza!
updatePizza(pizzaId: ID!, updatedPizzaDto: ChangePizzaDto!): Pizza!
createTopping(createToppingDto: ChangeToppingDto): Topping!
updateTopping(toppingId: ID!, updatedToppingDto: ChangeToppingDto!): Topping!
}
mutation {
createPizza (createPizzaDto: {
name: "My Awesome Pizza"
toppingIds: "1"
}) {
id
name
toppings {
id
name
}
}
}
type Subscription {
pizzasChanged: [Pizza]!
toppingsChanged: [Topping]!
}
subscription PizzaChanged {
pizzasChanged {
id
name
}
}
graphql-codegen
apollo-angular
$ mkdir server && cd server
$ npm init
# entry point: build/index.js
$ npx tsc --init --rootDir src --outDir build \
--esModuleInterop --resolveJsonModule --lib es6 \
--module commonjs --allowJs true --noImplicitAny true
$ npm i --save-dev uuid @types/uuid nodemon ts-node typescript
$ touch nodemon.json
{ "watch": ["src"], "ext": ".ts,.js", "ignore": [], "exec": "ts-node ./src/index.ts" }
"scripts": {
"prebuild": "npm run generate",
"prestart": "npm run generate",
"generate": "graphql-codegen --config codegen.yml",
"start": "nodemon",
"build": "rimraf ./build && tsc"
}
$ npm add --save-dev graphql
$ npm add --save-dev @graphql-codegen/cli
$ npm add --save-dev @graphql-codegen/typescript
$ npm add apollo-server
$ npm i --save-dev apollo-link-ws
$ npx graphql-codegen init
# (x) Backend
# schema: ./src/schema/*.ts
# plugins:
◉ TypeScript (required by other typescript plugins)
◉ TypeScript Resolvers (strongly typed resolve functions)
# output: skip
# introspection: n
# config: skip
# script: generate
$ npm i
$ mkdir src && touch src/index.ts
$ git clone git@ziermach.de:cziermann/angular-demo-template.git
$ git checkout graphql-template
or
$ cd angular-demo-template
$ npm add apollo-angular
$ ng add apollo-angular
$ npm add graphql
$ npm add --save-dev @graphql-codegen/cli
$ npm i
$ npx graphql-codegen init
# with Angular
# skip all
# script: generate
$ npm i
move the graphql.module.ts in src/