paiip

6

Click here to load reader

description

paiip

Transcript of paiip

Page 1: paiip

- Metode Asynchrone (async/await)

Metoda care va fi rulata asincron trebuie sa intoarca void, Task, sau Task<T>. Metoda apelanta care foloseste in interiorul ei apelul await trebuie marcata ca async. Compilatorul ar putea deduce automat acest pattern fara sa oblige programatorul sa marcheze metodele cu async. Await foloseste SynchronizationContext pentru a continua pe acelasi thread pe care metoda async a pornit. Rularea seriala datorata await este valabila doar in contextul metodei care contine apelul.

Nu doar pentru obiecte de tipul Task se poate apela await. Se poate apela await pentru orice tip care detine o metoda cu numele GetAwaiter. Nu exista o interfata ce trebuie implentata, doar o metoda GetAwaiter ce intoarce un tip cu urmatoarea semnatura de metode: IsCompleted, OnCompleted(Action), GetResult(). Vestea buna este ca aceste metode pot fi metode de extensie. Putem extinde astfel orice tip ( in masura in care are sens) pentru a suporta pattern-ul await.

- Task and Threads

Conceptul de thread (fir de execuție) definește cea mai mică unitate de procesare ce poate fi programată spre execuție de către sistemul de operare. Este folosit în programare pentru a eficientiza execuția programelor, executând porțiuni distincte de cod în paralel în interiorul aceluiași proces. Câteodata însă, aceste portiuni de cod care constituie corpul threadurilor, nu sunt complet independente și în anumite momente ale execuției, se poate întampla ca un thread să trebuiască să aștepte execuția unor instructiuni din alt thread, pentru a putea continua execuția propriilor instrucțiuni. Această tehnică prin care un thread asteaptă execuția altor threaduri înainte de a continua propria execuție, se numește sincronizarea threadurilor.

Task, Task<T> Reprezinta o abstractizare la un nivel mai inalt decat acela de Thread. Un task poate fi sau nu rulat pe un thread dedicat. Task-urile pot fi inlantuite folosind continuations, iar executia acestui lant de task-uri poate fi conditionata in functie de terminarea cu success sau nu a task-ului precedent.

- Protocolul HTTP

Este un protocol la nivel aplicatie destinat sistemelor de informare distribuite, "colaborative", de genul hypermedia. Aparut ca protocol de baza pentru WWW înca din 1990, a cunoscut o serie de transformari, o versiune "finala" neexistînd nici în prezent.

Numele este acronimul pentru HyperText Transfer Protocol, desi la origine "hypertext" a fost definitoriu, practica curenta l-a dus destul de repede înspre "hypermedia" - documentele vehiculate cuprinzînd nu numai text, ci si sunet, imagine sau informatii structurate.

Aplicatiile care folosesc protocolul - cei doi parteneri în discutie, cele doua capete ale unei conexiuni - sînt entitati abstracte din punct de vedere al protocolului. Ele trebuie "doar" sa poata comunica între ele ceea ce înseamna, în principiu, posibilitatea de a primi sau formula cereri si de a formula sau receptiona raspunsuri.

Cererile formulate în protocolul HTTP se refera la informatii care se pot afla stocate în diverse baze de date, în diverse formate, pe diverse calculatoare. Cum anume se traduc în cereri "concrete" date diferite, este o problema care depaseste protocolul: sarcina lui este doar sa fixeze regulile care trebuie respectate de cele doua aplicatii participante la un moment dat în comunicare pentru ca sa se poata întelege fara nici un fel de risc de interpretare eronata a unei cereri sau a unui raspuns.

- Metodele și cîmpurile prot. HTTP

Câmpuri din header: Cookie, ETag, Location, HTTP referrer, DNT, X-Forwarded-For

Page 2: paiip

Metodele sînt de fapt operatiile care pot fi aplicate obiectelor constituite de resursele din retea, în acceptiunea protocolului HTTP. Metoda va trebui sa fie totdeauna primul element dintr-o linie de cerere. Metodele sînt urmatoarele: OPTIONS, GET, HEAO, POST, PUT, PATCH, COPY, MOVE, DELETE, LINK, UNLINK, TRACE, WRAPPED.

OPTIONS semnifica o cerere relativa la informatiile ce definesc optiunile de comunicare disponibile pe conexiunea catre URI-ul specificat în cerere. Metoda permite determinarea optiunilor si/sau posibilitatilor unui server, fara sa determine o actiune din partea resursei adresate.

GET este una dintre cele mai importante metode si singura care era disponibila în prima versiune a protocolului, HTTP/0.9. GET este metoda care "aduce" ceva de la resursa; mai concret, daca resursa este un proces care produce date (o cautare de pilda), raspunsul la metoda GET va fi o entitate care sa cuprinda acele date. Raspunsul este unul singur: aceasta este o caracteristica de baza a protocolului. Chiar daca volumul de date care trebuie incluse în raspuns este mare, nu se face o fractionare în bucatele mai mici, care sa permita transferul mai usor al raspunsului. Din punct de vedere al protocolului HTTP, discutia este totdeauna simpla: o întrebare are un raspuns. Nu se pot pune mai multe întrebari pentru a obtine un singur raspuns, nu se pot formula mai multe raspunsuri la o întrebare.

HEAD este o metoda similara cu GET, folosita în principiu pentru testarea validitatii si/sau accesibilitatii unei resurse, sau pentru a afla daca s-a schimbat ceva. Sintaxa este similara metodei GET; spre deosebire de GET însa, datele eventual produse de resursa în urma cererii nu sînt transmise; doar caracteristicile acestora, si un cod de succes sau eroare. Ceva de genul "daca ti-as cere sa executi cererea mea, ce mi-ai raspunde?".

POST este metoda prin care resursei specificate în cerere i se cere sa îsi subordoneze datele incluse în entitatea care trebuie sa însoteasca cererea. Cu POST se poate adauga un fisier unui anumit director, se poate trimite un mesaj prin posta electronica, se poate adauga un mesaj unui grup de stiri, se pot adauga date unei baze de date existente, etc. Metoda POST este generala; care sînt procesele pe care un anumit server le accepta sau cunoaste îi sînt strict specifice.

PUT este o metoda care cere serverului ceva mai mult decît POST: sa stocheze/memoreze entitatea cuprinsa în cerere cu numele specificat în URI. Daca resursa specificata exista deja, entitatea noua trebuie privita ca o versiune modificata care ar trebui sa o înlocuiasca pe cea existenta. Serverul, bineînteles, va accepta sau nu aceasta cerere, functie de drepturile de acces pe care i le-a acordat clientului, si va raspunde cererii cu informatii corespunzatoare ("s-a facut", "nu pot", "nu ai voie sa faci treaba asta" etc.). Pentru a evita situatii care sa duca la încarcarea excesiva si nejustificata a retelei - de exemplu, un client care vrea sa "posteze" un text de 10 MB, fara sa tina seama de faptul ca serverul nu mai are atît loc atît o cerere de tipul POST cît si una de tipul PUT se desfasoara în doi timpi: întîi, clientul trimite numai parametrii metodei, fara sa trimita datele efective pe care le vrea postate. Dupa care asteapta 5 secunde. În acest timp, daca serverul raspunde, clientul ia în seama si analizeaza raspunsul serverului (iar daca acesta este "nu mai am loc", datele nu se mai transmit). Daca nu soseste nici un raspuns în timpul de asteptare, se considera implicit ca serverul accepta datele si acestea sînt transmise de catre client.

PATCH este o metoda similara lui PUT, dar nu contine toate datele care sa defineasca resursa, ci numai diferentele fata de versiunea existenta pe server. Cu toate informatiile necesare care sa îi permita serverului sa reconstruiasca o versiune la zi a resursei.

COPY, MOVE si DELETE sînt metode prin care se cere ca resursa specificata în URI-ul din cerere sa fie copiata în locatiile specificate ca parametri pentru metoda, mutata acolo sau respectiv doar stearsa.

LINK si UNLINK sînt metode prin care resursa specificata în cerere este legata/dezlegata de alte resurse, stabilind una sau mai multe relatii cu acestea din urma, specificate ca parametrii pentru metoda. Ar putea fi de exemplu un index pentru o baza de date, un cuprins pentru un set de documente, etc.

TRACE este o metoda care îi permite clientului sa vada cum ajung cererile sale la server, pentru a verifica/diagnostica conexiunea, pentru a se verifica pe sine sau pentru a determina felul în care eventualele proxy-uri de pe parcurs au modificat cererea initiala. Serverul, în raspuns la aceasta cerere, va trimite în ecou cererile care îi vin de la client, fara sa le mai trateze ca cereri "reale".

WRAPPED este o metoda care "contrazice" principiul protocolului de a trimite totdeauna o singura cerere si a astepta un singur raspuns. Via WRAPPED, mai multe cereri, care în mod obisnuit ar fi succesive, sînt "împachetate" într-una singura. Iar o alta aplicare a metodei tinteste masuri de

Page 3: paiip

securizare - o cerere poate fi cifrata si transmisa prin metoda WRAPPED, ceea ce va determina serverul sa actioneze în doi pasi: întîi sa descifreze cererea reala, iar apoi sa îi dea curs acesteia.

- XML/Json (metode de serializare/deserializare)

Serializarea este procesul prin care convertim un obiect intr-o secventa liniara de bytes (octeti) care poate fi stocata sau transferata.

Deserializarea este procesul invers serializarii

Platforma .NET include mai multe metode deformatare a datelor serializate:

- BinaryFormatter: cea mai eficienta metoda deserializare date in .NET- SoapFormatter: format bazat pe XML folositor pentru schimbul in retea de fisiere.

Serializare XML

- XML foloseste un format de organizare a datelor de tip arborescent si este un format standardizat, bazat pe text, pentru stocarea unor informatii ce pot fi citite usor de aplicatii.

- XML poate fi folosit pentru stocarea oricarui tip de date inclusiv documente, imagini, filme, muzica, etc.

- .NET framework ofera mai multe biblioteci pentru citire si scriere fisiere XML

Cand folosim serializare XML?

- Este recomandat sa folosim serializarea XML atunci cand dorim ca fisierele produse sau modificate de aplicatia noastra sa fie usor citibile de aplicatii ce nu sunt scrise in.NET

- In consecinta serializare XML are urmatoarele avantaje: Interoperatibilitate mai mare Fisierele pot fi editate usor cu editoare normale text Versionare mai usoara

Json este un acronim în limba engleză pentru JavaScript Object Notation, și este un format de reprezentare și interschimb de date între aplicații informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor și a altor structuri de date și este folosit în special pentru a transmite date structurate prin rețea, procesul purtând numele de serializare. JSON este alternativa mai simplă, mai facilă decât limbajul XML. Eleganța formatului JSON provine din faptul că este un subset al limbajului JavaScript , fiind utilizat alături de acest limbaj. Tipul de media pe care trebuie să îl transmită un document JSON este application/json. Extensia fișierelor JSON este .json.

- notiuni generale și moduri de utilizare RegEx

O expresie regulată, pe scurt denumită şi RegEx sau RegExp, este un şir de caractere care descrie un model de căutare în alt şir de caractere sau, de ce nu, într-un fişier întreg. Cu ajutorul expresiilor regulate poţi găsi sau înlocui anumite părţi dintr-un text. Sunt o metodă puternică de verificare pentru validitatea adreselor de e-mail, domenii de internet sau coduri poştale. Un e-mail valid trebuie să se muleze pe un model prestabilit. Cu RegEx putem verifica dacă o adresă e-mail se mulează sau nu se mulează pe respectivul model. Deasemenea cu ajutorul expresiilor regulate putem să analizăm fişiere tot mai mari de text în căutarea informaţiilor dorite. Există diferite definiţii pentru expresiile regulate, fiecare încercând să delimiteze mai bine acest concept. O definiţie pentru expresiile regulate este următoarea: o expresie regulată care se mai numeşte şi pattern, este o expresie care descrie un şir de caractere. Acest şir de caractere se interpretează şi identifică anumite şiruri de caractere. Practic şirul de caractere din şablonul expresiei regulate este schema generală sau “formula”.

În aplicațiile practice din dezvoltarea software, expresiile regulate bazate pe acest set simplu de operatori ar duce la scrierea unor expresii regulate insuficient de concise. De aceea, s-au elaborat unele notații pentru expresiile regulate speciale pentru utilizarea în practică. Cele mai importante dintre acestea sunt expresiile regulate POSIX, folosite pentru comenzile UNIX ce folosesc expresii

Page 4: paiip

regulate, precum și expresiile regulate Perl, sintaxă dezvoltată pentru limbajul de programare Perl, preluată și extinsă și de alte limbaje de programare, cum ar fi Java, JavaScript, Ruby și Python.

Există mai multe tehnici de identificare ce se pot utiliza pentru validarea unui șir printr-o expresie regulată. Cea mai simplă tehnică este cea backtracking,

O altă metodă o reprezintă așa-numita compilare a expresiei regulate, ceea ce presupune crearea automatului finit determinist (AFD) care validează limbajul regulat definit de expresie, și apoi rularea acestui automat pentru validarea șirului.

- HTML Parsing/xPath

Parsarea html se realizeaza cu 2 scopuri

- Ofera o interfata pentru programatori pentru a accesa cu usurinta si modifica codul html- de a imbunatati codul html ca exemplu parserul html Tidy

Sunt o multime de biblioteci special pentru parsarea documentelor html in diferite limbaje de programare. In C# cea mai folosita e Html Agility Pack aceasta biblioteca inclusa in .NET functioneaza aproximativ ca parsarea XML

XPath (XML Path Language) este un limbaj de expresii utilizat pentru a selecta porțiuni dintr-un document XML sau pentru a calcula valori (șiruri de caractere, numere, sau valori buleene) pe baza conținutului unui document XML

Limbajul XPath este structurat pe reprezentarea sub formă de arbore a documentului XML, oferind posibilitatea de a naviga în acest arbore, prin selecția nodurilor XML care satisfac diferite criterii. În utilizarea frecventă (care nu este o specificație oficială), o expresie XPath este deseori numită un XPath.

Motivația apariției acestui limbaj a fost dorința de a folosi aceeași sintaxă și același model atât pentru XPointer ca și pentruXSLT, XPath s-a încetățenit printre programatori ca fiind un mic limbaj de interogare, iar anumite părți ale sale sunt folosite în specificațiile W3C pentru XML Schema și XForms.