Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Graphql - ServerSide SP

Graphql - ServerSide SP

Ana Luiza Portello

July 04, 2018
Tweet

More Decks by Ana Luiza Portello

Other Decks in Programming

Transcript

  1. HTTP GET Songs Followers Ana Luiza Lorem Ipsum users/123 RESPONSE

    a { name: .., accountName: .., nickname: Ana Luiza, email: {..}, bio: Lorem Ipsum avatar: {..}, birthday: .., city: .., location: {..} ... }
  2. HTTP GET Songs Followers Ana Luiza Lorem Ipsum users/123/posts RESPONSE

    posts { { id: .. music: {..}, replies: {..}, likes: {..}, shares: {..}, … }, ... } Jovelli How I Feel
  3. HTTP GET users/123/followers RESPONSE followers { { name: .., accountName:

    .., Nickname: Vilmar, email: {..}, avantar: .. … }, ... } Songs 1.239 Jovelli How I Feel Ana Luiza Lorem Ipsum Followers
  4. “Ficamos frustrados com as diferenças entre os dados que queríamos

    e as requisições que eram necessárias para obtê-los” Lee Byron
  5. CORPO DA REQUEST { Os dados explícitos do que eu

    quero :) } POST endpoint graphql/
  6. HTTP POST graphql/ RESPONSE data { userName: .., avatar: ..,

    bio, followers [ {avatar: ..}, .. ] posts [ {artist: …, name:} ] } BODY query getUser { userName avatar bio followers(first: 3) { avatar } posts { artist name }
  7. RESPONSE [ { ‘name’: “ABBA”, }, { ‘name’: “Amy Winehouse”

    , }, { ‘name’: “Ana Carolina” , } ... ] CORPO query getArtists { artists { name } }
  8. RESPONSE { name: “Charlie Brown Jr.” albums: { { title:

    “Preço Curto Prazo Longo”, release_year: 1999 tracks { { title: “União” },{ title: “Te levar” }, .. } } } REQUEST query getArtists { artists { name albums { title release_year tracks { title } } } }
  9. RESPONSE { name: “Carolina de Oliveira Lourenço”, Bio: “Cantora e

    Compositora Brasileira” age: 24 } REQUEST { artist(name: “MC Carol”) { name bio age } }
  10. RESPONSE { user { name: “Ana” } } REQUEST query

    getUserNameById( $userId: String) { user(id: $userId): { name } } VARIABLE { userId: ‘21312321’ }
  11. RESPONSE { ‘data’ { ‘token’: “12345” } } REQUEST mutation

    authUser($user: User) { authUser(user: $user){ token } } VARIABLE { user { ... } }
  12. Permite que o servidor envie dados aos clients quando um

    evento específico acontece no backend.
  13. Mutations definem uma série de ações que mudam seus dados.

    Subscriptions definem uma série de eventos que você pode se inscrever(subscribe) pra quando os dados mudam.
  14. REQUEST subscription { subscribeToComment (filter: { mutation_in : [CREATED] }){

    comment { content author { username } } } } RESPONSE { “data”: { comment { content: “Nossa”, author { username: “Ana” } } } } RESPONSE { “data”: { comment { content: “Eita”, author { username: “Joao” } } } }
  15. Webhooks são chamados assim que uma certa ação é efeita,

    recebendo um payload com os dados que você precisa.
  16. const schema = buildSchema {` type Query { id: ID

    paid: Boolean price: !Float basket: [String] tax: Int } `}
  17. type Boleto { id: ID value: Float CPF: String expiration:

    Date status: Status } enum Status { PAID WAITING EXPIRED }
  18. type Talk { id: ID title: String description: String published:

    Date speaker: Speaker event: Event } type Speaker { id: ID firstName: String lastName: String talks: [Talks] } type Event { id: ID name: String location: String talks: [Talks] }
  19. CLIENT SERVER GRAPHQL DATA RESOLVE BODY JSON { query: {..}

    variables:{..} } { data: {..} errors:{..} }
  20. • DIFERENTES CLIENTES: Há a necessidade de criar várias versões

    de dados diferentes para múltiplos clientes. • PREPARAR DADOS: Há muito esforço do server preparar os dados e do cliente para parsea-los. • LINKAR DADOS: Quando os dados mudam com muita frequência e precisam estar linkados sempre.
  21. • HYPE: Achar hype, gostar do stack do facebook ou

    “usamos ReactJS”. • HTTP É ANTIGO: Consistencia, Caching, Status Code. • TOO NORMALIZED: Tenho muitas relações no meu banco de dados.