campus days 2014 owin

36
#CampusDays OWIN & Composable Web Apps

Upload: christian-horsdal

Post on 08-Jul-2015

582 views

Category:

Software


1 download

DESCRIPTION

"OWIN and Composable Web Apps

TRANSCRIPT

Page 1: Campus days 2014 owin

#CampusDays

OWIN & Composable Web Apps

Page 2: Campus days 2014 owin

About me

Christian Horsdal

Independent Consultant

www.horsdal-consult.dk

[email protected]

@chr_horsdal

Page 3: Campus days 2014 owin

#C

am

pusD

ays

Flexible

Componentized

Reusable

Testable

Page 4: Campus days 2014 owin

#C

am

pusD

ays

DemoHello OWIN World

Page 5: Campus days 2014 owin

Web Applications Handle HTTP Requests

5

Page 6: Campus days 2014 owin

6

Handler

Log request

Log response

Authenticate

Open DbContext

Close DbContext

Page 7: Campus days 2014 owin

Things You Might Do In the Pipeline

Open & dispose resources

Logging

Authentication

Authorization

Quick monitoring endpoints

Sanitize inputs

Content Negotiation

CORS

7

Page 8: Campus days 2014 owin

Things You Might Do In the Pipeline

Open & dispose resources

Logging

Authentication

Authorization

Quick monitoring endpoints

Sanitize inputs

Content Negotiation

CORS

8

Cross-cutting concerns

Re-use

Test separately

Update separately

Distribute separately

Page 9: Campus days 2014 owin

Do One Thing And Do It Well

9

Page 10: Campus days 2014 owin

Compose Pipeline However You Want

10

Page 11: Campus days 2014 owin

11

Handler

Log request

Log response

Authenticate

Open DbContext

Close DbContext

Minify HTML

Page 12: Campus days 2014 owin

OWIN

Page 13: Campus days 2014 owin

OWIN

• Open Web Interfaces for .NET

• Community driven standard

• Defines mechanics of pipeline

13

Page 14: Campus days 2014 owin

OWIN Terminology

Server

• The web server

•And/or an OWIN adapter

Middleware

• Those pieces in the pipeline

Application

• The handler

14

Page 15: Campus days 2014 owin

No shared assembly

Page 16: Campus days 2014 owin

OWIN Terminolgy 16

using AppFunc = Func<IDictionary<string, object>, Task>;

Page 17: Campus days 2014 owin

OWIN – Request Environment

Key Name

"owin.RequestBody"

"owin.RequestHeaders"

"owin.RequestMethod"

"owin.RequestPath"

"owin.RequestPathBase"

"owin.RequestProtocol"

"owin.RequestQueryString"

"owin.RequestScheme"

Page 18: Campus days 2014 owin

OWIN – Response Environment

Required Key Name

Yes "owin.ResponseBody"

Yes "owin.ResponseHeaders"

No "owin.ResponseStatusCode"

No "owin.ResponseReasonPhrase"

No "owin.ResponseProtocol"

Page 19: Campus days 2014 owin

OWIN Terminology 19

using MidFunc = Func<AppFunc, AppFunc>;

Handler

Log request

Log response

Authenticate

Open DbContext

Close DbContext

Page 20: Campus days 2014 owin

OWIN “Terminolgy” 20

using BuildFunc = Action<MidFunc>;

Page 21: Campus days 2014 owin

No shared assembly

Page 22: Campus days 2014 owin

22

Page 23: Campus days 2014 owin

#C

am

pusD

ays

DemoWrite an OWIN Middleware

23

Page 24: Campus days 2014 owin

24

OWIN and Web Frameworks

Page 25: Campus days 2014 owin

Compatible Frameworks

• ASP.NET MVC 6

• WebApi

• Nancy

• Simple.Web

25

Page 26: Campus days 2014 owin

ASP.NET 5 26

public class Startup{

public void Configure(IApplicationBuilder app){app.UseOwin();

}}

Page 27: Campus days 2014 owin

ASP.NET < 5 + Katana 27

public class Startup{

public void Configuration(IAppBuilder builder){

builder.Use(new MidFunc(next => (AppFunc)Invoke));}

public Task Invoke(IDictionary<string, object> environment) {…

}}

Page 28: Campus days 2014 owin

Katana 28

public class Startup{

public void Configuration(IAppBuilder app){app.Run(Invoke);

}

public Task Invoke(IOwinContext context){context.Response.ContentType = "text/plain";return context.Response.WriteAsync("Hello World");

}}

Page 29: Campus days 2014 owin

WebApi + Katana 29

Katana startup.cs code

public class Startup{public void Configuration(IAppBuilder builder){

HttpConfiguration config = new HttpConfiguration();config.Routes

.MapHttpRoute("Default", "{controller}/{id}",new { controller = "Home", id = RouteParameter.Optional

config.Formatters.XmlFormatter.UseXmlSerializer = true;config.Formatters.Remove(config.Formatters.JsonFormatter);

builder.UseWebApi(config);}

}

Page 30: Campus days 2014 owin

OWIN Testing

Integration test the complete pipeline

Integration test parts of the pipeline

While in process

30

Page 31: Campus days 2014 owin

31

Handler

Log request

Log response

Authenticate

Open DbContext

Close DbContext

Minify HTML

Page 32: Campus days 2014 owin

#C

am

pusD

ays

DemoUse our middleware with an app

32

Page 33: Campus days 2014 owin

#C

am

pusD

ays

Flexible

Componentized

Reusable

Testable

Page 34: Campus days 2014 owin

Christian Horsdal

@chr_horsdal

www.horsdal-consult.dk

Page 35: Campus days 2014 owin

EVENT SPONSORER

EXPO SPONSORER

TRACK SPONSORER

Page 36: Campus days 2014 owin

#C

am

pusD

ays

Q&A#Ask me about everything!

Join me at the Microsoft Booth the next 30 minutes @Meet The Experts

Dont forget to: Evaluate this session!