Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

INTRODUCTION Manuel Rauber [email protected] @manuelrauber https://manuel-rauber.com

Slide 3

Slide 3 text

TALKING POINTS Web APIs Node.js Restify Token Authentication Databases Examples

Slide 4

Slide 4 text

WEB APIS

Slide 5

Slide 5 text

WEB APIS - OVERVIEW

Slide 6

Slide 6 text

WEB APIS - OVERVIEW REST APIs, HTTP APIs, whatever APIs Model functional services with dedicated interfaces Can use several other services for data aggregation Secured by tokens Consumable by every client which can speak HTTP(S)

Slide 7

Slide 7 text

NODE.JS

Slide 8

Slide 8 text

NODE.JS IS NOT JQUERY IN COOL ;-)

Slide 9

Slide 9 text

NODE.JS - INTRO Server-side JavaScript powered by Chrome's V8 JavaScript Engine Asynchronous, event-driven I/O API NuGet-like package manager: Node Package Manager (npm) Cross platform: OS X, Windows, Linux Upcoming: alternative runtime Microsoft's ChakraCore

Slide 10

Slide 10 text

NODE.JS - FEATURE SUPPORT ECMAScript 6 Experimental ECMAScript 7 Classes Typed arrays Fat Arrow/Lambda Expressions Templated Strings

Slide 11

Slide 11 text

NODE.JS - ASP.NET CORE 1.0 Node.js ASP.NET Core 1.0 JS, TS, CS, ... Node Package Manager Dynamic types Single threaded Event Loop but async I/O threads C# NuGet Static types Multi threaded

Slide 12

Slide 12 text

NODE.JS - SERVER

Slide 13

Slide 13 text

NODE.JS - PROS Full stack JS development Universal JavaScript Same code on client and server Built-in streaming Open Source loving community Enterprise proven Paypal, Netflix, Groupon

Slide 14

Slide 14 text

NODE.JS - WATCH OUT Single threaded Event Loop Avoid heavy CPU usage via JS Utilizes one CPU only Scale via clustering Relational databases can be strange Code is documentation

Slide 15

Slide 15 text

RESTIFY

Slide 16

Slide 16 text

RESTIFY - OVERVIEW Node.js module to build Web APIs Middleware support (OWIN like) Client and server components Routing

Slide 17

Slide 17 text

RESTIFY - MIDDLEWARE c o n s t s e r v e r = r e s t i f y . c r e a t e S e r v e r ( ) ; / / R u n s b e f o r e . u s e h a n d l e r s s e r v e r . p r e ( ( r e q , r e s , n e x t ) = > { / * D o s o m e t h i n g * / } ) ; / / R u n s a f t e r . p r e h a n d l e r s s e r v e r . u s e ( ( r e q , r e s , n e x t ) = > { / * D o s o m e t h i n g * / } ) ; / / S a m p l e : U s i n g a p r e d e f i n e d m i d d l e w a r e s e r v e r . u s e ( r e s t i f y . b o d y P a r s e r ( ) ) ;

Slide 18

Slide 18 text

ASP.NET CORE 1.0 - MIDDLEWARE p u b l i c v o i d C o n f i g u r e S e r v i c e s ( I S e r v i c e C o l l e c t i o n s e r v i c e s ) { / / A d d a p r e d e f i n e d m i d d l e w a r e s e r v i c e s . A d d M v c ( ) ; } p u b l i c v o i d C o n f i g u r e ( I A p p l i c a t i o n B u i l d e r a p p , I H o s t i n g E n v i r o n m e n t e n v , I L o g g e r F a c t o r y l o g g e r F a c t o r y ) { / / U s e a p r e d e f i n e d m i d d l e w a r e a p p . U s e M v c ( ) ; }

Slide 19

Slide 19 text

RESTIFY - ROUTING / / H T T P G E T s e r v e r . g e t ( ' / h e l l o ' , ( r e q , r e s ) = > r e s . s e n d ( 2 0 0 , ' H e l l o W o r l d ' ) ) ; / / H T T P P O S T s e r v e r . p o s t ( ' / u p l o a d ' , s o m e M i d d l e w a r e ) ; / / H T T P P U T s e r v e r . p u t ( ' / c u s t o m e r / : i d ' , m i d d l e w a r e 1 , m i d d l e w a r e 2 ) ; / / H T T P D E L E T E s e r v e r . d e l ( ' / c u s t o m e r / : i d ' , a n o t h e r M i d d l e w a r e ) ;

Slide 20

Slide 20 text

ASP.NET CORE 1.0 - ROUTING [ H t t p G e t ( " h e l l o " ) ] p u b l i c I A c t i o n R e s u l t G e t ( ) { r e t u r n O k ( " H e l l o W o r l d " ) ; } [ H t t p P o s t ( " u p l o a d " ) ] p u b l i c I A c t i o n R e s u l t P o s t ( ) { } [ H t t p P u t ( " c u s t o m e r / { i d } " ) ] p u b l i c I A c t i o n R e s u l t P u t ( i n t i d ) { } [ H t t p D e l e t e ( " c u s t o m e r / { i d } " ) ] p u b l i c I A c t i o n R e s u l t D e l e t e ( ) { }

Slide 21

Slide 21 text

TOKEN AUTHENTICATION

Slide 22

Slide 22 text

TOKEN AUTH - OVERVIEW Securing resources (APIs) OAuth2 Protocol Simple & standard method for web, mobile and desktop applications OpenId Connect Identity Layer on top of OAuth2

Slide 23

Slide 23 text

TOKEN AUTH - NODE.JS Several node packages oauth2-server, oauth2orize, OpenIdConnect, node-oauth2-provider Currently no state-of-the-art package Implementation depends on the used package

Slide 24

Slide 24 text

TOKEN AUTH - ASP.NET CORE 1.0 State-of-the-art package IdentityServer4

Slide 25

Slide 25 text

DATABASES

Slide 26

Slide 26 text

DATABASES - NODE.JS Adapters for lots of databases NoSQL databases MongoDB, CouchDB Relational databases MSSQL, PostgreSQL, MySQL, Sqlite ORM: SequelizeJS Multiple databases, transactions, migrations, replication, query API

Slide 27

Slide 27 text

DATABASES - ASP.NET CORE 1.0 Entity Framework 7 Supports multiple databases MSSQL, Sqlite, InMemory, PostgreSQL Code First, Database First Migrations

Slide 28

Slide 28 text

LIVE DEMO

Slide 29

Slide 29 text

SUMMARY Node.js overview Feature support, Node.js server, pros, watch-out Web APIs with restify Routing, middlewares Token Authentication via OAuth2 OAuth2, outh2-server Relational databases via SequelizeJS Models, Query-API

Slide 30

Slide 30 text

SECURE DATA ACCESS Mobile Apps und Zugriff auf Unternehmensdaten ohne Cloud-Speicher und VPN Manuel Rauber Christian Weyer Today at 14:00 in room Würzburg

Slide 31

Slide 31 text

CHANNEL9 Cross-Platform Development https://channel9.msdn.com/Series/Thementag-Cross- Plattform-Entwicklung-mit-HTML5--Javascript

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

THANK YOU! GitHub repository https://github.com/thinktecture/nodejs-aspnetcore-webapi thinktecture.com

Slide 34

Slide 34 text

RESOURCES GitHub repository: Node.js: Node.js at Paypal: Node.js at Netflix: Node.js at Walmart: Restify: SequelizeJS: ASP.NET Core 1.0: Entity Framework 7: IdentityServer4: Angular 2: Channel9: https://github.com/thinktecture/nodejs-aspnetcore-webapi https://nodejs.org/ https://www.paypal-engineering.com/?s=node http://techblog.netflix.com/search/label/node.js https://www.joyent.com/developers/videos/node-js-at-walmart-introduction http://restify.com/ http://sequelizejs.com/ https://docs.asp.net/ http://docs.efproject.net/ https://github.com/IdentityServer/IdentityServer4 https://angular.io/ https://channel9.msdn.com/Series/Thementag-Cross-Plattform-Entwicklung-mit- HTML5--Javascript