@marinalimeira_
Engenheira de Software @ Nubank
marinalimeira.comTentarei abstrair o máximo que eu puder :)
Abrams (Shuffle - backoffice)
Shore (Shell - novo app)
Stormshield (Ghostflame - Nuconta)
Query language para APIs
Alternativa ao REST
Schema funciona como um contrato entre o cliente o servidor
type Item {
name: String!
price: Int!
quantity: Int
}
type Storage {
items: [Item]
}
Agnóstico a linguagem, tanto pra cliente quanto pra servidor
Equivalente ao GET do REST
query {
items {
name
price
}
}
{
"data": {
"items": [
{
"name": "Poké Ball",
"price": "200"
},
{
"name": "Super Potion",
"price": "200"
}
]
}
}
Status code normalmente é 200 ou 400
Informações sobre o erro estarão no corpo da resposta
Status 4xx ou 5xx
e.g. PIN - 403
Padrão é: não tem padrão 😢
Ref: facebook.github.io/graphql
{
"data": {
"items": null,
},
"errors": [
{
"message": "Unauthorized",
"status": "401",
}
]
}
Equivalente a POST - PUT - PATCH - DELETE do REST
mutation {
buyItem(input: { name: 'Poké Ball', quantity: 10}) {
success
}
}
Total de ~7kk no NPM
Simula a resposta do servidor antes de completar o request
mutate({
variables: { name: evt.target.value },
optimisticResponse: {
addChannel: {
name: evt.target.value,
id: Math.round(Math.random() * -1000000),
__typename: 'Channel',
},
},
update: ...
})
Ref:
dev-blog.apollodata.com/tutorial-graphql..
Mesma finalidade do Redux ➡ estado global
É possível utilizar mesma query para dados locais e do servidor
Single source of truth
query {
items {
name
price
quantity
}
shopping @client {
quantity
}
}
const stateLink = withClientState({
cache,
resolvers: {
Mutation: {
updateShoppingCart: (_, { items }, { cache }) => {
const data = {
shoppingCart: { __typename: 'ShoppingCart', items },
};
cache.writeData({ data });
return null
},
},
}
});
Ref:
apollographql.com/docs/link...
Se não estivéssemos utilizando GraphQL, não utilizaríamos o apollo-link-state.