Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST...

34
Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Transcript of Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST...

Page 1: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Consumare e realizzareservizi REST per il web

Pietro Brambatiblogs.msdn.com/pietrobr

Developer Evangelist, Microsoft

Page 2: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Agenda

Introduzione al .NET Framework

Parte 1:

Windows Communication Foundation

Parte 2:

REST

ADO.NET Data Services

Page 3: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Architettura .NET Framework 3.5

Base Class Library

Common Language Runtime

VB C++ C#V

isu

al S

tud

io 2

00

8 S

P1

F# …

Web Services

ASP.NET

User

Interface

WPF WCF WF WCS

Page 4: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

PARTE 1

Page 5: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Evoluzione delle architetture distribuite

Clients

PCs

Web

Web Services

TMainframe

DBMSBusiness

Logic

BrowserMulti-Tier DBMSBusiness

Logic

Service-

Oriented DBMSBusiness

Logic Business

Logic

GUIClient/ServerDBMS

Business

Logic

Business

Logic

Page 6: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

WCF Obbiettivi

Fornire un modello unificato di programmazione per diverse tecnologie e API

ASP.NET Web Service

Interoperabilità tra piattaforme

.NET Remoting

Comunicazione efficiente tra applicazioni .NET

Enterprice Services (successore di COM+)

Servizi di Transazionalità

Web Services Enhancements (WSE)

WS-*

Microsoft Message Queuing (MSMQ)

Per applicazioni asincrone, non sempre connesse

Implementa le best practices per costruire applicazioni distribuite basate sui principi della service orientation

Interoperabile con applicazioni di altre piattaforme con ampiosupporto per WS*-Architecture

Page 7: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

WCF: Scenari architetturali

WCF

Applicazione

Processo

Computer Windows Piattaforme NON- Windows

WCF

Applicazione

Processo

WCF

Applicazione

Processo

Computer Windows

Comunicazione tra

processi

Comunicazione tra

processi remoti

Comunicazione tra

piattaforme eterogenee

Page 8: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

WS-*

Foundation

Applicazioni e Infrastruttura

Trasporto

Connected Applications Management

BusinessProcess

Security

Security

Trust

Secure Conversation

Messaging (SOAP, Addressing, MTOM)

XML (XML, XSD, XPath)

Me

tad

ata

(WS

DL

, P

oli

cy,

Dis

co

very

, M

EX

)

HTTP TCP SMTP …

Reliability

Reliable Messaging

Transactions

Atomic Transaction

Coordination

Business Activity

Page 9: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Endpoint

Caller Service

MessageEndpoint Endpoint

Endpoint

Page 10: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Address, Binding, Contract

Caller Service

MessageABC A B C

A B C

Address Binding Contract

(Where) (How) (What)

Page 11: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Behaviors

Caller Service

MessageABC A B C

A B C

Bv Bv

Bv Bv

Metadata

Page 12: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Runtime

Caller Service

MessageABC A B C

A B C

Metadata

Bv Bv

Bv Bv

ProxyServiceHost<T>()

Page 13: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Address, Contract, Binding

Client Code Service Code

Proxy Dispatcher

Protocol #1 Protocol #1

Encoder

Transport

Encoder

Transport

Message

Protocol #n Protocol #n

Binding Binding

Address

Contract

Page 14: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

DEMO

Page 15: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

PARTE 2

Page 16: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Applicazioni, protocolli e formati

AJAX

app

RIA

Mash-up

Client

HTML e Javascript

Plug-in

binary

HTML iframe

Middle-Tier Data-Tier

Internet/Intranet Service

Page 17: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

REST: Representational State Transfer

Architectural-style

Tutto accedibile via Uri

Data Centric

Stateless

Si presta al caching

ClientAPI

Service

GET api.myservice.it/Customer/1/ ….

Page 18: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

REST vs SOAP

Si “pensa” e in termini di risorse

Interfaccia condivisa

Usa HTTP

Non richiede librerieparticolari

Sicurezza: https

Non esistonoequivalenze con WS-*

Si “pensa” in termini dioperazioni

Funzionalità diverse a seconda delleapplicazioni

Protocolli diversi(HTTP, TCP)

Richiede un client SOAP

Standards WS-*

Page 19: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

ADO.NET Data ServicesArchitettura

.NET Client

Library

AJAX

Client Library

Silverlight

Client Library

Servizio WCF

specializzato per

REST

Data Source Provider

Entity Framework

Custom LINQ provider

Relational database

Other sources

Data Services Runtime

Hosting/HTTP Listener

IQueryable [+ IUpdatable]

HTTP

Other Platform

(http)

Page 20: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

ADO.NET Entity FrameworkIn una slide

Evoluzione di ADO.NET

Entità logiche più che tabelle

Un modello concettuale dei dati

Eg: un oggetto Customer, su db 1 o più tabelle

Disaccoppia lo schema del database dall‟applicazione

Supporto di diversi DBMS

tramite provider di terze parti (Oracle, MySQL, …)

Un nuovo designer Visual Studio 2008 SP1

Page 21: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

In: “PGPD”, out: JSON,AtomPubs

HTTP Request

Create POST

Read GET

Update PUT (MERGE)

Delete DELETE

HTTP Response

JSON compatto (AJAX style)

AtomPubs XML style

Page 22: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

DEMOExploring ADO.NET Data Services

Page 23: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

URL Conventions“Triviali” e non

Addressing entities e setsEntity-set /Customers

Single entity /Customers(„ALFKI‟)

Member access /Customers(1)/ContactName

Link traversal /Customers (1)/Orders

Deep access /Customers(1)/Orders(2)/ShippedDate

Raw value access /Customers(1)/Photo/$value

Sorting /Customers?$orderby=ContactName desc

Filtering /Classes?$filter=substringof(Name, „Math‟)

Paging /Students?$top=10&$skip=30

Inline expansion /Customers(„ALFKI‟)?$expand=Orders

Presentation options

http://msdn.microsoft.com/it-it/library/cc907912(en-us).aspx

Page 24: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Eager loading

“Per ogni cliente dammi gli ordini”Di default: “a richiesta”1. GET HTTP per /Customers2. GET HTTP per /Customers(„ALF‟)/Orders

Eager Loading1. GET HTTP /Customers?expand=OrdersChiamata Client

Finiamo il codice!

Page 25: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft
Page 26: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Sicurezza

AutenticazioneNessuno nuovo schema specifico

IIS, WCF+ASP.NET

AutorizzazioneChiusa di default per ogni richiesta HTTP

A livello di Entities

[ReadSingle, ReadMultiple, AllRead, Write*, WriteReplace, WriteDelete, WriteMerge,

All*]

A livello di ServiceOperation[None, ReadSingle, ReadMultiple, AllRead, All]

Page 27: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Validazione e Controllo degli Accessi

Per singola richiesta Interceptors

predicati componibili alla query inviata allostore

Per operazioni di Read QueryInterceptor

Page 28: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Validazione e Controllo degli Accessi

Per singola richiesta Interceptorspredicati componibili alla query inviata allostorePer Insert, Update, Delete ChangeInterceptor

Page 29: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

DEMOControllo degli accessi

Page 30: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft
Page 31: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Concorrenza

Default : “last wins”

Optimistic Concurrency

if-*,eTag in HTTP 1.1 risoluzioni dei conflitti

Attributo [ETag] sulle Entità

Page 32: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Batch Requests

Più operazioni in una singola richiestaHTTP

in RIA per scenari alla “gestionale”

Modello Logico:

[0,*] Query Operation

[0,*] ChangeSet Operation (CUD)

Modello Fisico:

service.svc/$batch

Request: multipart/mixed MIMEhttp://blogs.msdn.com/astoriateam/archive/2008/04/06/batching-data-service-requests.aspx

Page 33: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

Conclusione

WCF : libreria per realizzare applicazionidistribuite

Per scenari sia SOAP che REST

ADO.NET Data Services: specializzazionedi un servizio WCF per consumare risorseattraverso un‟interfaccia REST

Page 34: Consumare e realizzare servizi REST per il web - unibo.it · Consumare e realizzare servizi REST per il web Pietro Brambati blogs.msdn.com/pietrobr Developer Evangelist, Microsoft

© 2003-2008 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.