Top Banner
HTML5 Knockout Web API SignalR Webstack of @bradwilson http://bradwilson.typepad.com/
29

HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

Oct 16, 2018

Download

Documents

ngodat
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

HTML5

Knockout

Web API

SignalR

Webstack of ♥

@bradwilson http://bradwilson.typepad.com/

Page 2: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

UI Mockup from the Designer

Demo

Page 3: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

Model View View

Model

HTML

Markup

Business

Layer

Knockout

(Observables)

Page 4: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<div>

Hello, <strong>NDC</strong>

</div>

Declarative

Page 5: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<div>

Hello,

<strong data-bind="text: name" />

</div>

Declarative

Page 6: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<ul>

<li>Item 1</li>

<li>Item 2</li>

<li>Item 3</li>

<ul>

Iterative

Page 7: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<ul data-bind="foreach: items">

<li data-bind="text: name"></li>

<ul>

Iterative

Page 8: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<input type="button" onclick="someJavaScript(thisObj)" />

Eventing

Page 9: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<input type="button" data-bind="click: modelFunction" />

Eventing

Page 10: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<div>

<span data-bind="text: buyer().firstName" />

<span data-bind="text: buyer().lastName" />

</div>

<div>

<span data-bind="text: seller().firstName" />

<span data-bind="text: seller().lastName" />

</div>

Templating

Page 11: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

<div data-bind="template: { name='fullName', data: buyer }" />

<div data-bind="template: { name='fullName', data: seller }" />

<script type="text/html" id="fullName"> <span data-bind="text: firstName" /> <span data-bind="text: lastName" /> </script>

Templating

Page 12: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

• View models with simple values are read once

• View models with observables get live updates

ko.observable(value)

ko.observableArray([...])

ko.computed(function() { ... })

ko.applyBindings(viewModel)

Observables

Page 13: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

Convert Mockup to Knockout

Demo

Page 14: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

ASP.NET Web API

MVC excels at processing form data and

returning HTML.

Web API excels at processing and returning

structured data like JSON or XML.

When you want to do both, use both.

Elevator Pitch

Page 15: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

ASP.NET Web API

• Routing

• Controllers and actions

• Filters

• Model binding

• Dependency injection support

Mix in a Little of the Old…

Page 16: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

ASP.NET Web API

• Dispatch based on HTTP verb

• Parameter binders

• Formatters

• Introspection

• Async from top to bottom (using Task<T>)

• Pluggable hosting layer

…With a Little of the New

Page 17: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

ASP.NET Web API

• HttpRequestMessage in

• HttpResponseMessage out

• HttpMessageHandler in-between

• No thread affinity, no static state

Inspired by System.Net.Http

Page 18: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

ASP.NET Web API

http://aspnetwebstack.codeplex.com

• JSON.NET

• DotNetOpenAuth

• Tools, too: WiX, xUnit.net, Moq, StyleCop

Built as (and with) Open Source

Page 19: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

Add Web API for Persistence

Demo

Page 20: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

SignalR

• Persistent connections

– Send/receive discrete strings

• Hubs

– RPC-style messages

Server library: .NET

Client libraries: .NET, JavaScript

Two levels of abstraction

Page 21: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

SignalR

• Web sockets

• Server-sent events

• Forever frames

• Long polling

Connection Mechanisms

Page 22: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

SignalR

• Connection events

– Connected / Reconnected

– Disconnected

• Information distribution

– Send to specific client

– Broadcast to all clients

Persistent Connection

Page 23: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

SignalR

public class MyHub : Hub {

public string Echo(string value) {

return value;

}

}

Hubs (Server, inbound)

Page 24: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

SignalR

var hub = $.connection.myHub;

var result = hub.echo("value");

hub.tellAll("Hello, world!");

Hubs (client, outbound)

Page 25: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

SignalR

public class MyHub : Hub {

public void TellAll(string message) {

Caller.doSomething(message);

Clients.doSomething(message);

Clients[id].doSomething(message);

}

}

Hubs (server, outbound)

Page 26: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

SignalR

var hub = $.connection.myHub;

hub.doSomething = function(message) {

// Do something with the message

};

hub.tellAll("Hello, world!");

Hubs (client, inbound)

Page 27: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

Live Collaboration with SignalR

Demo

Page 28: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

Resources

http://github.com/bradwilson/ndc2012

http://bradwilson.typepad.com/blog/talks.html

Securing ASP.NET Web APIs Dominick Baier – Thu 11:40, Room 2

SignalR: Awesome in Realtime Damian Edwards – Thu 17:40, Room 8

Async Parts 1 & 2 Lucian Wischik – Fri 13:40 & 15:00, Room 8

Page 29: HTML5 Knockout Web API SignalR - Brad Wilsonbradwilson.typepad.com/presentations/knockout-webapi-signalr.pdf · HTML5 Knockout Web API SignalR ... Web API excels at processing and

Thank you!

Webstack of ♥

@bradwilson http://bradwilson.typepad.com/