Slide 1

Slide 1 text

@StreamdataIO streamdataio API Streaming Why and how to transform a REST API into a Data Streaming API

Slide 2

Slide 2 text

ABOUT ME Developer Relation Co-Leader France @Audrey_Neveu @StreamdataIO streamdataio

Slide 3

Slide 3 text

MODERN TIMES @StreamdataIO streamdataio

Slide 4

Slide 4 text

OUR GOAL @StreamdataIO streamdataio

Slide 5

Slide 5 text

ANIMATION IS THE KEY... BUT WHY? @StreamdataIO streamdataio

Slide 6

Slide 6 text

BECAUSE OF EVOLUTION @StreamdataIO streamdataio

Slide 7

Slide 7 text

USER INTERFACE @StreamdataIO streamdataio

Slide 8

Slide 8 text

KEEP CALM AND... @StreamdataIO streamdataio LEAVE.

Slide 9

Slide 9 text

REFRESH BUTTON IS EVIL @StreamdataIO streamdataio

Slide 10

Slide 10 text

REAL-TIME USER EXPERIENCE @StreamdataIO streamdataio

Slide 11

Slide 11 text

API STREAMING @StreamdataIO streamdataio

Slide 12

Slide 12 text

SOLUTIONS FOR REAL-TIME APPLICATIONS ✓ Web Sockets ✓ Server-Sent Events ✓ (Long) Polling @StreamdataIO streamdataio

Slide 13

Slide 13 text

IS NOT A SOLUTION POLLING... @StreamdataIO streamdataio (and neither is long polling)

Slide 14

Slide 14 text

*TRUE* SOLUTIONS Push Technologies Web-Sockets Server-Sent Events 2008 2006 @StreamdataIO streamdataio W3C Specification

Slide 15

Slide 15 text

PUSH TECHNOLOGIES Web-Sockets Server-Sent Events Text + Binary Text @StreamdataIO streamdataio

Slide 16

Slide 16 text

PROTOCOLS GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13 GET /stream HTTP/1.1 1 Host: example.com Accept: text/event-stream HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13 Web-Sockets (RFC-6455) Server-Sent Events @StreamdataIO streamdataio

Slide 17

Slide 17 text

CONFIGURATION Server-Sent Events @StreamdataIO streamdataio Web-Sockets

Slide 18

Slide 18 text

MESSAGES FORMAT var msg = { type: "message", text: "Hello APIStrat!", id: 12345, date: Date.now() }; data: Hello APIStrat! data: Hello APIStrat! data: with two lines data: {"time": "16:34:36", "text": "Hello APIStrat!"} id: 12345 event: foo data: Hello APIStrat! retry: 10000 @StreamdataIO streamdataio Web-Sockets Server-Sent Events

Slide 19

Slide 19 text

IMPLEMENTATION Server-Sent Events @StreamdataIO streamdataio Web-Sockets var websocket = new WebSocket ('ws://websocketserver/echo'); var eventSource = new EventSource ('http://sseserver/echo'); websocket.onOpen = function(){ ... }; eventSource.onopen = function(){ ... }; websocket.onMessage = function(e){ var data = e.data; var message = data.msg; ... }; eventSource.onMessage = function(e){ var message = JSON.parse(e.data); ... }; websocket.onError = function(e){ ... }; eventSource.onError = function(e){ ... }; ... eventSource .addEventListener('foo',function(e){ // do something }, false); eventSource .addEventListener('bar',function(e){ // do something else }, false);

Slide 20

Slide 20 text

LOST IN CONNECTION Server-Sent Events @StreamdataIO streamdataio Web-Sockets

Slide 21

Slide 21 text

BROWSER SUPPORT Server-Sent Events 53. 49. 10. 39. 11. 14. 53. 49. 10. 39. 11. UC. @StreamdataIO streamdataio Web-Sockets source : http://caniuse.com/

Slide 22

Slide 22 text

MOBILE BROWSER SUPPORT Server-Sent Events 51. 49. 10. 18. 52. source : http://caniuse.com/ 51. 49. 10. 18. 52. @StreamdataIO streamdataio Web-Sockets

Slide 23

Slide 23 text

PERFORMANCES 8s 5s x1.6 8s 6s x1.3 16s 7s x.2.2 Web-Sockets SSE source: http://matthiasnehlsen.com/blog/2013/05/01/server-sent-events-vs-websockets/ Diff @StreamdataIO streamdataio

Slide 24

Slide 24 text

CHOOSE WISELY @StreamdataIO streamdataio

Slide 25

Slide 25 text

Proxy-as-a-Service ✓ works with any JSON API ✓ streaming based on Server-Sent Events ✓ dynamic cache ✓ incremental updates STREAMDATA.IO @StreamdataIO streamdataio

Slide 26

Slide 26 text

JSON-PATCH (RFC-6902) [{"title":"Value 0","price":66,"param1":"1","param2":"22","param3":"33"}, {"title":"Value 1","price":63,"param1":"11","param2":"2","param3":"53"}, {"title":"Value 2","price":85,"param1":"1","param2":"22","param3":"33"}, {"title":"Value 3","price":21,"param1":"31","param2":"12","param3":"4"}, {"title":"Value 4","price":10,"param1":"151","param2":"22","param3":"33"}, {"title":"Value 5","price":6,"param1":"11","param2":"21","param3":"33"}, {"title":"Value 6","price":60,"param1":"11","param2":"222","param3":"33"}] [{"title":"Value 0","price":66,"param1":"1","param2":"22","param3":"33"}, {"title":"Value 1","price":63,"param1":"11","param2":"2","param3":"53"}, {"title":"Value 2","price":5,"param1":"1","param2":"22","param3":"33"}, {"title":"Value 3","price":21,"param1":"31","param2":"32","param3":"4"}, {"title":"Value 4","price":10,"param1":"151","param2":"22","param3":"33"}, {"title":"Value 5","price":6,"param1":"11","param2":"21","param3":"33"}, {"title":"Value 6","price":60,"param1":"11","param2":"222","param3":"33"}] [{"op":"replace","path":"/2/price","value":5}, {"op":"replace","path":"/3/param2","value":"32"}] @StreamdataIO streamdataio

Slide 27

Slide 27 text

THE API PROVIDER BEST FRIEND Sample Case: Investment Mobile App @StreamdataIO streamdataio Stockmarket API Web & Mobile Apps ➢ 25bn calls/month ✓ 90% reduction of the outgoing traffic & API Server Load ✓ 6 months acceleration in development

Slide 28

Slide 28 text

DEMO @StreamdataIO streamdataio

Slide 29

Slide 29 text

VOTE SERVER-SENT EVENTS! @StreamdataIO streamdataio

Slide 30

Slide 30 text

@StreamdataIO streamdataio THANKS! Q&A