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

Existe Vida Além do REST?

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Existe Vida Além do REST?

Construir uma API pode parecer simples. Transformar models em JSON, uma forma de autenticação e pronto, temos uma "API". O padrão REST é adotado como solução na maioria das vezes, mas, sem o conhecimento adequado, o design de uma API pode ficar confuso e despadronizado, dificultando a utilização dos usuários. Além disso, outras tecnologias fornecem soluções diferentes para problemas encontrados durante a concepção e/ou consumo de uma API. Essa talk analisa o REST e outras tecnologias com exemplos para que você entenda seus usuários e tome a decisão certa para sua API.

Avatar for Ravan Scafi

Ravan Scafi

March 28, 2017

More Decks by Ravan Scafi

Other Decks in Technology

Transcript

  1. GET /whoami Ravan Scafi Back-end Developer na Leroy Merlin Brasil

    Co-organizador do Meetup do Laravel SP @ravanscafi
  2. Interface é um elemento que proporciona uma ligação física ou

    lógica entre dois sistemas ou partes de um sistema que não poderiam ser conectados diretamente.
  3. GET /api/users/rscafi HTTP/1.1 Host: meusite.dev { "id": "rscafi", "name": "Ravan

    Scafi", "website": "http://ravan.me", "_links": { "self": { "href": "http://meusite.dev/api/users/rscafi" } } }
  4. Exemplo - Slack DELETE /users/rscafi HTTP/1.1 Host: api.slack.com Content-Type: application/json

    {“status”: “kicked”, “kick_channel”: “random”}
  5. SOAP - Exemplo <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <soapenv:Header> <ns1:RequestHeader soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:ns1="https://www.google.com/apis/ads/publisher/v201605"> <ns1:networkCode>123456</ns1:networkCode> <ns1:applicationName>DfpApi-Java-2.1.0-dfp_test</ns1:applicationName> </ns1:RequestHeader> </soapenv:Header> <soapenv:Body> <getAdUnitsByStatement xmlns="https://www.google.com/apis/ads/publisher/v201605"> <filterStatement> <query>WHERE parentId IS NULL LIMIT 500</query> </filterStatement> </getAdUnitsByStatement> </soapenv:Body> </soapenv:Envelope>
  6. RPC baseado em JSON - Exemplo POST /getAdUnitsByStatement HTTP/1.1 HOST:

    api.example.com Content-Type: application/json {"filter": "WHERE parentId IS NULL LIMIT 500"}
  7. Exemplo - Slack POST /api/channels.kick HTTP/1.1 Host: slack.com Content-Type: application/json

    { "token": "xxxx-xxxxxxxxx-xxxx", "channel": "random", "user": "rscafi" }
  8. gRPC service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {}

    } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
  9. API

  10. API

  11. API

  12. API Geral Android API Web API iOS API Netflix’ API

    Gateway (existe o Zuul na frente, mas isso é tema pra outra talk)
  13. REST - Problemas É difícil evoluir os dados sem saber

    o que os clientes de fato consomem
  14. REST vs GraphQL Foco Implementação Clientes Cache REST Resiliência Evolutiva

    Parecidos Robusto GraphQL Performance Deve atender a especificação Diferentes Difícil
  15. Empatia é a capacidade de se identificar com outra pessoa,

    de sentir o que ela sente, de querer o que ela quer, de apreender do modo como ela apreende etc.
  16. Agradecimentos Agradecimentos especiais a todos do SlidesCarnival que fizeram e

    disponibilizaram o template da apresentação gratuitamente.