2011 - DNC: REST Wars

53
REST Wars daniel.fisher@devcoa ch.com

Transcript of 2011 - DNC: REST Wars

Page 1: 2011 - DNC: REST Wars

REST Warsdaniel.fisher@devcoach

.com

Page 2: 2011 - DNC: REST Wars

devcoach.comBERTAUNG + SCHULUNG + PROJEKTE

• Themen– Architektur & Technologie

Evaluierung, Performance Optimierung, Entwicklungs-Unterstützung, Security Reviews, QA, POC & Know-how-Transfer

• Technologien– Services: WCF & WF– Data: ADO.NET & EF– Web: ASP.NET, MVC & Silverlight

• Kunden– Versicherung, Finanzindustrie,

Mittelstand, Handel, Kommunikation, Softwarehersteller… Und sie?

• Kontakt– [email protected]

Page 3: 2011 - DNC: REST Wars

Daniel Fisher• devcoach.com

– Mit-Gründer und Geschäftsführer

• Justcommunity.de– Mit-Gründer und Vorstand

• nrwconf.de– Mit-Gründer und Organisator

• netug-niederrhein.de– Mit-Gründer und Leiter

• microsoft.com– Community Leader & Insider (CLIP)– Certified Professional Developer– Business Platform Technology Advisor

• lennybacon.com– Blog

• twitter.com– @lennybacon

Page 4: 2011 - DNC: REST Wars

Efficient Communication…

Page 5: 2011 - DNC: REST Wars

Agenda

• Introducing REST• WCF WebHttp• ASP.NET MVC• WCF Web API• Summary

Page 6: 2011 - DNC: REST Wars

Introducing REST

Page 7: 2011 - DNC: REST Wars

Introducing REST

Page 8: 2011 - DNC: REST Wars
Page 9: 2011 - DNC: REST Wars
Page 10: 2011 - DNC: REST Wars
Page 11: 2011 - DNC: REST Wars
Page 12: 2011 - DNC: REST Wars
Page 13: 2011 - DNC: REST Wars
Page 14: 2011 - DNC: REST Wars
Page 15: 2011 - DNC: REST Wars
Page 16: 2011 - DNC: REST Wars
Page 17: 2011 - DNC: REST Wars
Page 18: 2011 - DNC: REST Wars

Windows Communication Foundation WebHttp

Page 19: 2011 - DNC: REST Wars

Unified Programming Model

Interopwith otherplatforms

ASMX

Attribute- Based

Programming

Enterprise Services

WS-*ProtocolSupport

WSE

Message-Oriented

Programming

System.Messaging

ExtensibilityLocation

transparency

.NET Remoting

Page 20: 2011 - DNC: REST Wars

WS-*

Security

Messaging

ReliableMessaging Transactions

Meta

data

XML

Page 21: 2011 - DNC: REST Wars

The Microsoft Web PlatformM

icro

soft

Web

Pla

tform

Vis

ual Stu

dioASP.NET Web

Forms

ADO.NET

SQL Server

Internet Information Services

ASP.NET MVC

Silverlight MsAjax jQuery

WCF

Page 22: 2011 - DNC: REST Wars

Address, Binding & Contract

Caller Service

MessageABC A B C

A B C

Address Binding Contract

(Where) (How) (What)

Page 23: 2011 - DNC: REST Wars

Address

public class Global : HttpApplication{ void Application_Start( object sender, EventArgs e) { RouteTable.Routes.Add( new ServiceRoute( string.Empty, new WebServiceHostFactory(), typeof(SessionPlanerService))); }}

Page 24: 2011 - DNC: REST Wars

Binding

<bindings> <basicHttpBinding> <binding configurationName="Binding1" hostNameComparisonMode="StrongWildcard" sendTimeout="00:10:00" maxMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" </binding> </basicHttpBinding></bindings>

Page 25: 2011 - DNC: REST Wars

Contract + Address (parts)

[ServiceContract]public interface ISessionPlaner{ [WebGet(UriTemplate = "Sessions")] List<SessionDetail> GetAllSessions();}

Page 26: 2011 - DNC: REST Wars

demo!

Page 27: 2011 - DNC: REST Wars

Automatic Format Selection

<system.serviceModel> <standardEndpoints> <webHttpEndpoint> <standardEndpoint name="" automaticFormatSelectionEnabled="true"> <security mode="None"/>

Page 28: 2011 - DNC: REST Wars

Extensibilitypublic class MyBehavior : WebHttpBehavior{}

public class MyClientFormatter : IClientMessageFormatter{}

public class MyDispatchFormatter : IDispatchMessageFormatter{}

public class MyEndpointBehavior : BehaviorExtensionElement , IEndpointBehavior{}

Page 29: 2011 - DNC: REST Wars

Extensibility<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="SomeName"> <myExtension /> </behavior> </endpointBehaviors> </behaviors> <services> <service name="Service"> <endpoint address="" binding="basicHttpBinding" contract="IService" behaviorConfiguration="SomeName"/> </service> </services> <extensions> <behaviorExtensions> <add name="myExtension" type="devcoach.ServiceModel.SomeEndpointBehavior, devcoach.ServiceModel, …"/> </behaviorExtensions> </extensions></system.serviceModel>

Page 30: 2011 - DNC: REST Wars

Extensibility Client<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="SomeName"> <myExtension /> </behavior> </endpointBehaviors> </behaviors> <client> <endpoint name="SomeEntpointName" address="" binding="basicHttpBinding" contract="IService" behaviorConfiguration="SomeName"/> </client> <extensions> <behaviorExtensions> <add name="myExtension" type="devcoach.ServiceModel.SomeEndpointBehavior, devcoach.ServiceModel, …"/> </behaviorExtensions> </extensions></system.serviceModel>

Page 31: 2011 - DNC: REST Wars

demo!

Page 32: 2011 - DNC: REST Wars

ASP.NET MVC

Page 33: 2011 - DNC: REST Wars

The Microsoft Web PlatformM

icro

soft

Web

Pla

tform

Vis

ual Stu

dioASP.NET Web

Forms

ADO.NET

SQL Server

Internet Information Services

ASP.NET MVC

Silverlight MsAjax jQuery

WCF

Page 34: 2011 - DNC: REST Wars

ASP.NET ArchitectureA

pplic

ati

on

Pool

ASP.

NE

T (

Htt

pR

unti

me)

HttpApplication Application_Start

Application_End

Application_Error

HttpContext

RequestModules

HttpHandler

Begin_Request

ResponseModules

Authenticate_Request

UpdateRequestCache

PostRequestHandlerExecuted

Kern

el C

ach

e

Page 35: 2011 - DNC: REST Wars

− The request hits the Controller.− The Model is loaded.− The View is provided with data and − renders markup to the

client.

Controller

Model

View

1

2

3

4

Page 36: 2011 - DNC: REST Wars

Uripublic static void RegisterRoutes(RouteCollection routes){    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     routes.MapRoute(        "Default", // Route name        "{controller}/{action}/{id}", // URL with parameters        new            {                controller = "Home",  // if parameter not in URL                action = "Index",  // if parameter not in URL                id = UrlParameter.Optional            } // Parameter defaults    );}

Page 37: 2011 - DNC: REST Wars

Functionality

using System.Web.Mvc;

 …

public class HomeController : Controller

{ [HttpGet]

public ActionResult About()

{

return WhateverResult();

}

}

Page 38: 2011 - DNC: REST Wars

demo!

Page 39: 2011 - DNC: REST Wars

Extensibilitypublic class MyFilterAttribute

: ActionFilterAttribute

{

public override void OnActionExecuting(

ActionExecutingContext filterContext)

{

// Before...

}

 

public override void OnActionExecuted(

ActionExecutedContext filterContext)

{

// After...

}

Page 40: 2011 - DNC: REST Wars

Extensibilitypublic class ModelResult<T>  : ActionResult { public override void ExecuteResult( ControllerContext context) { var r = context.HttpContext.Response; r.Write(…); }}

Page 41: 2011 - DNC: REST Wars

demo!

Page 42: 2011 - DNC: REST Wars

Windows Communication Foundation WCF Web API

Page 43: 2011 - DNC: REST Wars

New Message Types

• HttpResponseMessage, JsonValue

Page 44: 2011 - DNC: REST Wars

demo!

Page 45: 2011 - DNC: REST Wars

Extensibility

public class MyFormatter : MediaTypeFormatter{}public class MyChannel : DelegatingChannel{}

Page 46: 2011 - DNC: REST Wars

Extensibilityprotected void Application_Start(object sender, EventArgs e){ var config = HttpHostConfiguration.Create(). AddFormatters(new MyFormatter()). AddMessageHandlers(typeof(MyChannel)); SetMappings();

RouteTable.Routes.MapServiceRoute<MyService>("Contact", config);}

public void SetMappings(){ var mappings = new List<UriExtensionMapping>(); mappings.AddMapping("xml", "application/xml"); SetUriExtensionMappings(mappings);}

Page 47: 2011 - DNC: REST Wars

demo!

Page 48: 2011 - DNC: REST Wars

Summary

• WCF 4.0 WebHTTP– Released with the .NET Framework.– Easy to start with REST, if you already

have WCF in the house.– Advanced goals can be reached,but with

high effort.– Distance to the Web can be felt.

Page 49: 2011 - DNC: REST Wars

Summary

• ASP.NET MVC– Version 3.0 released as separate

Product.– Easy to start with REST, if you know any

Web-Platform.– Advanced goals can be easily reached

with small effort.– It's the raw Web.

Page 50: 2011 - DNC: REST Wars

Summary

• WCF 4.0 WebAPIHTTP– Currently a Preview Release.– Easy to adopt from the WCF perspective.– Advanced goals can be reached, with

less high effort.– Still Abstracted from the web.

Page 51: 2011 - DNC: REST Wars

Resources

• WCF 4.0 WebHTTP– Part of the Platform

• http://www.microsoft.com/downloads/en/details.aspx?FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7

– Hotfix for jQuery• http://wcf.codeplex.com/

• ASP.NET MVC 3.0– Released Product

• http://www.asp.net/mvc

• WCF Web API– CTP 4

• http://wcf.codeplex.com/releases/view/64449

Page 52: 2011 - DNC: REST Wars

Q&A

Page 53: 2011 - DNC: REST Wars

Thank You

[email protected]