Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado...

65
1 MANDIC + RIVENDEL. ESPECIALISTAS EM CLOUDS. Minha API deve ser REST?

Transcript of Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado...

Page 1: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

1

MANDIC + RIVENDEL. ESPECIALISTAS EM CLOUDS.

Minha API deve ser REST?

Page 2: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

2

Engenheira de Dados

@alanepontes

Alane Pontes

Page 3: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

3

Engenheiro de Software

@ezidio

Everton Tavares

Page 4: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

4

Histórico

Page 5: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

5

Criado por Roy Fielding, um dos principais criadores do HTTPhttps://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

Page 6: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

6

Rest disponibiliza recursos através de padronização de URIs*

*Uniform Resource Identifier

Page 7: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

7

Rest é o uso de todo potencial do HTTP

Page 8: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

8

Rest x SOAP

Page 9: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

9

Rest x SOAP

Page 10: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

10

Rest x SOAP

Page 11: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

11

Rest é, na maioria das vezes, a primeira escolha para criação de API’s

Page 12: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

12

Rest é fácil

Page 13: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

13

Rest é comum

Page 14: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

14

Existem vários frameworks para trabalhar com Rest

Page 15: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

15

Rest tem suas limitações

Page 16: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

16

Over-fetching

Page 17: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

17

Under-fetching

Page 18: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

18

Page 19: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

19

/sports/sports/1/sports/1/competitions/sports_with_competitions/sports_with_competitions_but_only_abbreviation

Page 20: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

20

Rest é bom para todos os contextos?

Page 21: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

21

Alternativas ao Rest

Page 22: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

22

https://graphql.org/

Page 23: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

23

GraphQL

+ Criado pelo Facebook+ Não é um protocolo+ Não é um Data Interchange Format+ Focado em grafos+ Permite definir os campos que deseja retornar na consulta+ Separa consultas e mutações+ Permite mais de uma consulta em uma única requisição.+ Consulta definida no body de uma mensagem POST

Page 24: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

24

GraphQL

+ Fortemente tipado+ Declativo+ Hierarchical+ Não pertence a uma linguagem especifica+ compatível com qualquer backend

Page 25: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

25

GraphQL

type Query { products: [Product] product(id:Int): [Product]}type Product { id: Int name: String tags: [String] price: Float category: Category}type Category { name: String}

{ products: { id name price category: { name } }}

Page 26: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

26

GraphQL

type Query { products: [Product] product(id:Int): [Product]}type Product { id: Int name: String tags: [String] price: Double category: Category}type Category { name: String}

{ products: [ { “id”: 1, “name”: “Relogio Casio”, “price”: 270.4, “category”: { “name”: “Relogio” } }, { … } ]}

Page 27: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

27

GraphQL

type Query { products: [Product] product(id:Int): [Product]}type Product { id: Int name: String tags: [String] price: Double category: Category}type Category { name: String}

{ product(id = 2): { id name }}

Page 28: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

28

GraphQL

type Query { products: [Product] product(id:Int): [Product]}type Product { id: Int name: String tags: [String] price: Double category: Category}type Category { name: String}

{ product: { “id”: 1, “name”: “Relogio Casio” }}

Page 29: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

29

GraphQL - Mutations

type Mutation { update(id:Int, name:String): Product delete(id:Int): Boolean}

mutation { update(id: 2, name: “Teste”): { id name } delete(id: 5)}

Page 30: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

30

Rest x SOAP

Page 31: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

31

Rest x GraphQL

GRAPHQL

Page 32: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

32

https://netflix.github.io/falcor/

Page 33: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

33

Falcor

+ Criado pela Netflix+ Focado em grafos+ Permite definir os campos que deseja retornar na consulta+ Somente consultas+ Tipagem fraca+ Possui diversos tipos de providers+ Usar Falcor é como acessar um JSON diretamente.

http://netflix.github.io/falcor/

Page 34: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

34

var model = new falcor.Model({

source: new HttpDataSource(baseUrl + '/model.json')

});

var jsonGraph = await model.get(["products", {from: 0, to:10},

["id","name","price"]]);

Falcor

Page 35: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

35

/GET?paths=[“products[0..10][‘id’,’name’,’price’]”]{ products: [ { “id”: 1, “name”: “Relogio Casio”, “price”: 270.4 }, { … } ]}

Falcor

Page 36: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

36

Falcor

{

categoryById: {

"10": {

product: "Relogios",

done: false,

prerequisites: [{ $type: "ref", value: ["todosById", 54] }]

}, {...}

},

categories: [{ $type: "ref", value: ["categoryById", 10] }, { ... }],

Page 37: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

37

Falcor

products: [

{

id: 1

name: "Relogio Casio",

price: 270.4

category: { $type: "ref", value: ["categoryById", 10] }

},

{...}

]

}

Page 38: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

38

https://grpc.io/

Page 39: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

39

gRPC

+ Criado pelo Google+ RPC - Remote Procedure Call+ Usa Protocol Buffers & Flat Buffers (Data Interchange Format)+ Simple service defination+ Usa HTTP/2+ Disponível para diversas linguagens (Java, PHP, C++, Go, JavaScript, Ruby,

Python, C#, Objective-C, Android/Java e Dart)

Page 40: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

40

https://grpc.io/

Page 41: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

41

https://grpc.io/

Page 42: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

42

gRPC

service ProductService { rpc getProduct (ProductRequest) returns (Product) {}}message ProductRequest { int32 id = 1;}message ProductReply { int32 id = 1; string name = 2; double price = 3;}

Page 43: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

43

Page 44: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

44

C#

GoPython

Page 45: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

45

Um pouco mais sobre o Protocol Buffers

Page 46: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

46

Protocol Buffer

+ Garantia de type-safety+ Prevenção de violações de schema+ É gerado simples acessores+ Fast serialização/desserialização

Page 47: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

47

Protocol Buffers vs JSON - Deserialização

Page 48: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

48

Protocol Buffers vs JSON - Tamanho da Mensagem

Page 49: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

49

Flat Buffer

Page 50: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

50

Flat Buffer

+ tem mais opções de schemas.+ é indicado para um grande conjunto de dados.+ não desserializa todo o dado até que você o use.

Page 51: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

51

Flat buffer vs Protocol Buffers vs Json

Page 52: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

52

Outros protocolos

+ WebSocket+ SOAP+ ...

Page 53: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

53

Economia

200 Milhões

Page 54: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

54

Criar seu próprio protocolo

Page 55: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

55

Protocolo próprio

+ Nem sempre é reinventar a roda+ Regra de negócio pode exigir isso+ Arquitetura pode exigir isso

Page 56: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

56

https://github.com/GuiaBolso/events-protocol

Page 57: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

57

Alternativas ao JSON

Page 58: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

58

O padrão Rest não obriga utilizar o JSON

Page 59: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

59

Alternativas

+ YAML+ XML+ Binary JSON+ Protocol Buffer+ FlatBuffers+ Etc...

Page 60: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

Concluindo...

Page 61: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

61

Rest é excelente

Page 62: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

62

Contexto pode exigir alternativas

Page 63: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

63

Page 64: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

64

Page 65: Minha API deve ser REST? MANDIC + RIVENDEL. ESPECIALISTAS … · 2018-12-14 · 23 GraphQL + Criado pelo Facebook + Não é um protocolo + Não é um Data Interchange Format + Focado

Obrigado!