Sala 2 05 tratamento de notificações - rafael prenzier

Post on 05-Jun-2015

216 views 4 download

description

3º Developers Conference MercadoLibre Brasil

Transcript of Sala 2 05 tratamento de notificações - rafael prenzier

Rafael Prenzier

TRATAMENTO DE NOTIFICAÇÕES

Software Engineer

Tratamento de notificações

Rafael Prenzier dos Santos

Developer Conference

Agenda

● Príncipios● Como receber notificações● Erros comuns● Ferramentas● Sugestões de implementação

Developer Conference

Mas o que é uma Notificação?

Developer Conference

O que é uma notificação?

É um POST HTTP contendo um JSONO Mercado Livre essa mensagem para a url configurada na sua Aplicação

Pépe, já tirei a vela !

Developer Conference

Fluxo de uma notificação

1. Um evento ocorre dentro do MercadoLivre

2. O MercadoLivre envia uma notificação do evento para todas as apps autorizadas no cadastro do usuário

3. As aplicações confirmam o recebimento da notificação

Developer Conference

Notificação

Developer Conference

Notificação

Developer Conference

Notificação

POST

Developer Conference

{ "user_id": "12345678", "resource": "/questions/123456789", "topic": "questions", "received": "2014-02-04T19:00:04+00:00", "sent": "2014-02-04T19:00:45+00:00"}

Notificação

POST

Developer Conference

{ "user_id": "12345678", "resource": "/questions/123456789", "topic": "questions", "received": "2014-02-04T19:00:04+00:00", "sent": "2014-02-04T19:00:45+00:00"}

Notificação

POST

Developer Conference

{ "user_id": "12345678", "resource": "/questions/123456789", "topic": "questions", "received": "2014-02-04T19:00:04+00:00", "sent": "2014-02-04T19:00:45+00:00"}

Notificação

POST

200 OK

Developer Conference

Quais eventos disparam notificações?

Qualquer alteração dentro do conteúdo de:● Items;● Questions;● Orders (Vendas);● Payments;

Ex: Uma venda vai gerar notificação de Item, pois diminuiu o estoque, uma notificação de nova venda e também uma notificação de pagamento assim que a venda for paga

Developer Conference

Configurar o recebimento de notificações?

http://applications.mercadolibre.com

● Notification Callback URL

● Topics - Items, Orders, Questions e Payments

Developer Conference

Developer Conference

http://www.suaurlaqui.com/notification

Developer Conference

http://www.suaurlaqui.com/notification

x

x

x

x

Developer Conference

Exemplo notificação de Item

{

"user_id": 1234,

"resource": "/items/MLB139876",

"topic": "items",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Developer Conference

{

"user_id": 1234,

"resource": "/items/MLB139876",

"topic": "items",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Item

Developer Conference

{

"user_id": 1234,

"resource": "/items/MLB139876",

"topic": "items",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Item

Developer Conference

{

"user_id": 1234,

"resource": "/items/MLB139876",

"topic": "items",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Item

Developer Conference

{

"user_id": 1234,

"resource": "/items/MLB139876",

"topic": "items",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Item

Developer Conference

{

"user_id": 1234,

"resource": "/items/MLB139876",

"topic": "items",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Item

Developer Conference

{

"user_id": 1234,

"resource": "/items/MLB139876",

"topic": "items",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Item

Developer Conference

Exemplo notificação de Order

{

"user_id": 1234,

"resource": "/orders/139876",

"topic": "orders",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent": "2011-10-19T16:40:34.425Z"

}

Developer Conference

Exemplo notificação de Order

{

"user_id": 1234,

"resource": "/orders/139876",

"topic": "orders",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent": "2011-10-19T16:40:34.425Z"

}

Developer Conference

Exemplo notificação de Order

{

"user_id": 1234,

"resource": "/orders/139876",

"topic": "orders",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent": "2011-10-19T16:40:34.425Z"

}

Developer Conference

{

"user_id": 1234,

"resource": "/questions/139876",

"topic": "questions",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Question

Developer Conference

{

"user_id": 1234,

"resource": "/questions/139876",

"topic": "questions",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Question

Developer Conference

{

"user_id": 1234,

"resource": "/questions/139876",

"topic": "questions",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação de Question

Developer Conference

{

"user_id": 1234,

"resource": "/collections/123123123",

"topic": "payments",

"attempts": 1,

"received": "2014-07-21T18:51:28+00:00",

"sent": "2014-07-21T18:51:28+00:00"

}

Exemplo notificação de Payments

Developer Conference

{

"user_id": 1234,

"resource": "/collections/123123123",

"topic": "payments",

"attempts": 1,

"received": "2014-07-21T18:51:28+00:00",

"sent": "2014-07-21T18:51:28+00:00"

}

Exemplo notificação de Payments

Developer Conference

Exemplo notificação de Payments

{

"user_id": 1234,

"resource": "/collections/123123123",

"topic": "payments",

"attempts": 1,

"received": "2014-07-21T18:51:28+00:00",

"sent": "2014-07-21T18:51:28+00:00"

}

Developer Conference

Recebendo Notificações

Developer Conference

Confirmação de recebimento

A confirmação de recebimento é bem simples:

Retornar o status HTTP 200, se a notificação foi recebida com sucesso.

Qualquer status diferente de 200 será considerado falha no recebimento e serão realizadas novas tentativas de envio.

Developer Conference

{

"user_id": 1234,

"resource": "/questions/139876",

"topic": "questions",

"attempts": 2,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Exemplo notificação Repetida

Developer Conference

{

"user_id": 1234,

"resource": "/questions/139876",

"topic": "questions",

"attempts": 3,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T17:40:34.425Z",

}

Exemplo notificação Repetida

Developer Conference

{

"user_id": 1234,

"resource": "/questions/139876",

"topic": "questions",

"attempts": 4,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T18:40:34.425Z",

}

Exemplo notificação Repetida

Developer Conference

{

"user_id": 1234,

"resource": "/questions/139876",

"topic": "questions",

"attempts": 5,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T19:40:34.425Z",

}

Exemplo notificação Repetida

Developer Conference

Mas eu vou ficar recebendo as notificações pra sempre?

Developer Conference

Intervalo de envio das notificações

A partir do recebimento da primeira notificação em um período de 12 horas serão feitas novas tentativas de entregar as notificações,

Após 12 horas a notificação é descartada!

Developer Conference

{

"user_id": 1234,

"resource": "/questions/2880XXX87",

"topic": "questions",

"attempts": 1,

"received": "2011-10-19T16:38:34.425Z",

"sent" : "2011-10-19T16:40:34.425Z",

}

Recuperando os dados da notificação

Developer Conference

https://api.mercadolibre.com/questions/2880XXX87

Recuperando os dados da notificação

Developer Conference

GET

https://api.mercadolibre.com/questions/2880XXX87

Recuperando os dados da notificação

Developer Conference

{ "id": 2880XXX87, "answer": null, "date_created": "2013-09-23T13:13:52.000-04:00", "deleted_from_listing": false, "hold": false, "item_id": "MLB50XXX993", "last_updated": "2013-09-23T15:52:09.000-04:00", "seller_id": "362XXXX5", "status": "DELETED", "suspected_spam": false, "text": "o jogo vem completo né ?", "from": - { "id": 844XXXX2, "answered_questions": 4, },}

GET

https://api.mercadolibre.com/questions/2880XXX87

Recuperando os dados da notificação

Developer Conference

{ "id": 2880XXX87, "answer": null, "date_created": "2013-09-23T13:13:52.000-04:00", "deleted_from_listing": false, "hold": false, "item_id": "MLB50XXX993", "last_updated": "2013-09-23T15:52:09.000-04:00", "seller_id": "362XXXX5", "status": "DELETED", "suspected_spam": false, "text": "o jogo vem completo né ?", "from": - { "id": 844XXXX2, "answered_questions": 4, },}

GET

https://api.mercadolibre.com/questions/2880XXX87

Recuperando os dados da notificação

Developer Conference

Erros Comuns

Developer Conference

Portas bloqueadas + Firewall

http://www.minhaurl.com:7846910/notifications

Recomendamos

:80:8080:443

Developer Conference

Não confirmação do recebimento

200

Developer Conference

Não Selecionar Tópicos

Developer Conference

Perdas de notificações

$> Notifications > /dev/null

Developer Conference

Ferramentas

Developer Conference

Test Notification Url

http://developers.mercadolibre.com/test-notification-url/

Developer Conference

http://developers.mercadolibre.com/api-health-view/

API Status - Delay de notificação

Developer Conference

Alternativa - Buscas

/users/$USER_ID/items/search

/orders/search?seller=$USER_ID

/questions/search?seller=$USER_ID

/collections/search?seller=$USER_ID

sort=date_desc

Developer Conference

Sugestão de implementação

Developer Conference

Guarde sua notificaçãoSalve a Notificação assim que recebe-la

Quebrando o sincronismo você irá trabalhar melhor com essa notificação

Developer Conference

Versione a notificação

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

Sugestão de implementação

Banco de Dados

VISH...

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

DOG PILE

Developer Conference

Sugestão de implementação

Banco de Dados

Developer Conference

Sugestão de implementação

Developer Conference

Developer Conference

O que é Importante!

Confirmar o recebimento da notificação com o status HTTP 200

Developer Conference

O que é Importante!

Sua URL de notificação deve ser pública para o Mercado Livre conseguir te enviar as notificações

Por Obséquio

Developer Conference

O que é Importante!

Salve sua notificação

Porque você não salva as notificações?

Developer Conference

Obrigado!