“Truly understanding ASP.NET Web API” sau hățișul acronimelor

[rant on]
Cine a urmărit blogurile în ultima vreme a observat că mai toată lumea vorbește de ce a aparut nou in .NET 4.5, și mai ales de ASP.NET Web API.

Cine sapă de mai multă vreme pe ogorul .NET probabil și-au zis: “not again”.. 🙂
Doar în lumea Microsoft, când vine vorba de aplicații distribuite, a avut:
– DCOM,
– .NET Remoting
– ASP.NET Web Services (.asmx) si WSE,
– WCF,
– WCF Data Services (fost ADO.NET Data Services, fost Astoria)
– WCF RIA Services (fost .NET RIA Services)

– WCF+WebHTTPBinding (în .NET 3.5),
– WCF REST Starter Kit
– WCF WebHTTP Services (în .NET 4.0)
– WCF Web API
– ASP.NET MVC REST services
Probabil cineva de la Microsoft cand a văzut ultimele 5, a zis .. wtf? și s-au hotărât să le unifice:
– ASP.NET Web API

(Și asta fără să mai amintesc alte API-uri pentru TCP/IP sockets, WebSockets etc..)

Confusing? 🙂 Suficient – daca WPF promitea să unifice ASP.NET Web Services respectiv .NET Remoting, și oarecum a reușit, mai nou vedem o aparentă explozie de API-uri.
E ceva în neregulă cu WCF? Depinde de mulți factori.

WCF a încercat să abstractizeze diversele protocoale intr-o mare masură, și să fie cât mai flexibil – a reușit asta destul de bine și arhitectura internă e destul de elegantă, însă cu prețul unei complexităti care a duscurajat mulți programatori care nu aveau nevoie de ceva prea sofisticat. La asta s-au mai adăugat alți factori mai mult sa umai puțin subiectivi:
– SOAP si SOA – frumoase în teorie, dar care nu au avut succesul sperat înafara mediului “enterprise”
– AJAX si SOAP/WSDL – complexitatea SOAP si WSDL nu au fost cea mai bună alegere pentru noul val de aplicații web care vroiau un API simplu, cu un payload cat mai mic (capitol la care XML nu strălucește)
– deși destul de răspândit, suportul pentru SOAP și puzderia de specificații WS-* nu e nici la ora actuală universal sau uniform așa cum se spera (în primul rând datorită complexitătii). Mulți programatori au descoperit că nu au decât rareori nevoie multe din protocoalele WS-*.

Treptat, s-a conturat un curent care l-aș numi “back to basics” – lumea a realizat că la ora actuală ne putem baza pe un numitor comun: TCP/IP si HTTP cand vine vorba interoperare între diverse aplicații pe web. Deși nu era o idee nouă, mulți au re-descoperit faptul ca HTTP-ul e un application-level protocol, și ca ‘HT’ din denumire (hyper-text) nu se referă doar la HTML.
[rant off]

Dar destul cu filozofia. Încercând să înțeleg care e locul ASP.NET Web API în toată această poveste, am descoperit că trebuie să fac un mic reset și să înțeleg următoarele noțiuni (care par elementare, dar nu sunt):

Unde aș folosi ASP.NET Web API – în multe cazuri: aplicații Silverlight, aplicații web ce folosesc la greu AJAX și/sau HTML5, web services publice care vor avea clienți pe mai multe platforme sau limbaje.

Unde nu? La comunicarea, într-un intranet, între diversele componente server-side ale aceleiași aplicații, și unde contează performanța și unde nu se pune problema expunerii acelui web service către “publicul larg”.
În cazul în care un web service urmează a fi consumat de către un client care nu are suport facil pentru REST-style web services.
Dacă e nevoie de diverse features mai avansate, oferite doar de WCF sau dacă am nevoie de OData support (încă nu știu în ce masură Web API are suport pentru OData ușor de folosit).

Revenind la denumiri, pentru cine nu a urmarit zi de zi genealogia lui ASP.NET Web API: acesta e succesorul WCF Web API, care e succesorul lui REST Starter Kit, și intentioneaza să înlocuiască ASP.NET MVC REST services.
WCF in sine rămâne, la fel și WCF Data si RIA Services (au un target un pic diferit).

Morala ar fi – odată asimilate conceptele de bază (HTTP, REST etc), nu mai e o tragedie când se schimbă diversele frameworkuri odata la câtiva ani.

Advertisements
This entry was posted in .NET, WCF, WCF, Web and tagged , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s