Tutorial Servicii Web RESTful: Exemplu de API REST
โก Rezumat inteligent
Serviciile Web RESTful oferฤ o abordare uศoarฤ, fฤrฤ stare, pentru ca aplicaศiile sฤ schimbe date prin HTTP folosind verbe standard. Acestea expun resursele prin intermediul unor procese curate. URLs, permiศรขnd comunicarea scalabilฤ ศi independentฤ de platformฤ รฎntre clienศi distribuiศi, servere, dispozitive mobile ศi platforme moderne de cloud ศi inteligenศฤ artificialฤ.
Ce este Restful Web Services?
Servicii web odihnitoare este un serviciu uศor, uศor de รฎntreศinut ศi scalabil, construit pe arhitectura REST. Un serviciu web Restful expune o API din aplicaศia dvs. รฎntr-un mod sigur, uniform ศi fฤrฤ stare clientului apelant. Clientul apelant poate apoi efectua operaศiuni predefinite utilizรขnd serviciul Restful. Protocolul de bazฤ pentru REST este HTTP, iar REST รฎnseamnฤ REpresentational State Transfer (Transfer de stare reprezentativฤ).
รn termeni simpli, REST defineศte o modalitate standard prin care resursele, cum ar fi documentele, imaginile sau รฎnregistrฤrile bazei de date, pot fi create, citite, actualizate ศi ศterse pe web. Deoarece se bazeazฤ pe HTTP simplu, aproape orice limbaj de programare sau dispozitiv poate consuma un serviciu RESTful fฤrฤ instrumente speciale.
De ce sฤ folosiศi servicii web odihnitoare?
รnainte de a explora detaliile tehnice, este util sฤ รฎnศelegem de ce REST a devenit atรขt de popular. Serviciile web RESTful au devenit importante din urmฤtoarele motive:
1. Limbi ศi medii eterogene โ Acesta este unul dintre motivele fundamentale, care este acelaศi cu cel pe care l-am vฤzut pentru SOAP de asemenea.
- Permite aplicaศiilor web construite pe diverse limbaje de programare sฤ comunice รฎntre ele.
- Cu ajutorul serviciilor Restful, aceste aplicaศii web pot rezida รฎn medii diferite; unele ar putea fi pe Windows, iar altele ar putea fi pe Linux.
รn final, indiferent de mediu, rezultatul ar trebui sฤ fie รฎntotdeauna acelaศi: aplicaศiile ar trebui sฤ poatฤ comunica รฎntre ele. Serviciile web odihnitoare oferฤ aceastฤ flexibilitate aplicaศiilor construite pe diverse limbaje de programare ศi platforme.
Imaginea de mai jos oferฤ un exemplu de aplicaศie web care are nevoie sฤ comunice cu alte aplicaศii precum Facebook, Twitter ศi Google.
Dacฤ o aplicaศie client ar trebui sฤ funcศioneze cu site-uri precum Facebook ศi Twitter, dezvoltatorii ar trebui, รฎn mod normal, sฤ ศtie pe ce limbaj ศi platformฤ sunt construite acele site-uri. Pe baza acestui fapt, ar putea scrie codul de interfaศฤ, dar aceastฤ abordare s-ar putea dovedi a fi un coศmar de รฎntreศinut.
รn schimb, Facebook, Twitter ศi Google expun funcศionalitatea lor sub forma unor servicii web Restful. Acest lucru permite oricฤrei aplicaศii client sฤ apeleze aceste servicii web prin REST, indiferent de tehnologia subiacentฤ.
2. Evenimentul Dispozitivelor โ รn zilele noastre, totul trebuie sฤ lucreze Mobil dispozitive, fie cฤ este vorba de un telefon mobil, un laptop sau chiar un sistem auto.
Imaginaศi-vฤ efortul necesar pentru a codifica aplicaศii pe aceste dispozitive pentru a comunica cu aplicaศiile web normale. Din nou, API-urile Restful simplificฤ aceastฤ sarcinฤ deoarece, aศa cum am menศionat la punctul unu, nu este nevoie sฤ cunoaศteศi stratul subiacent al dispozitivului.
3. Evenimentul Norului โ Totul se mutฤ รฎn cloud. Aplicaศiile se mutฤ รฎncetul cu รฎncetul cฤtre sisteme bazate pe cloud, cum ar fi Azure or Amazon. Azure ศi Amazon oferฤ numeroase API-uri bazate pe arhitectura Restful. Prin urmare, aplicaศiile trebuie acum dezvoltate astfel รฎncรขt sฤ fie compatibile cu cloud-ul. รntrucรขt toate arhitecturile bazate pe cloud funcศioneazฤ pe principiul REST, este logic ca serviciile web sฤ fie programate pe o arhitecturฤ bazatฤ pe REST pentru a utiliza la maximum serviciile cloud.
Elemente cheie RESTful
Serviciile web REST au parcurs un drum lung de la รฎnceputurile lor. รn 2002, consorศiul Web a lansat definiศia serviciilor web WSDL ศi SOAP. Aceasta a format standardul modului รฎn care au fost implementate serviciile web.
รn 2004, consorศiul web a lansat ศi definiศia unui standard suplimentar numit RESTful. รn ultimii ani, acest standard a devenit destul de popular ศi este utilizat acum de multe dintre cele mai populare site-uri web din รฎntreaga lume, inclusiv Facebook ศi Twitter.
REST este o modalitate de a accesa resurse care se aflฤ รฎntr-un anumit mediu. De exemplu, aศi putea avea un server care gฤzduieศte documente, imagini sau videoclipuri importante. Toate acestea sunt exemple de resurse. Dacฤ un client, cum ar fi un browser web, are nevoie de oricare dintre aceste resurse, trebuie sฤ trimitฤ o cerere cฤtre server. Serviciile REST definesc o modalitate standard รฎn care aceste resurse pot fi accesate.
Elementele cheie ale unei implementฤri RESTful sunt urmฤtoarele:
- Resurse โ Primul element cheie este resursa รฎn sine. Sฤ presupunem cฤ o aplicaศie web de pe un server are รฎnregistrฤri ale mai multor angajaศi. Sฤ presupunem cฤ URL al aplicaศiei web este https://demo.guru99.comAcum, pentru a accesa o resursฤ de รฎnregistrare a unui angajat prin intermediul serviciilor REST, se poate executa comanda https://demo.guru99.com/employee/1Aceastฤ comandฤ รฎi spune serverului web sฤ furnizeze detaliile angajatului al cฤrui numฤr de angajat este 1.
- Cerere verbe โ Acestea descriu ce doriศi sฤ faceศi cu resursa. Un browser emite un verb GET pentru a instrui endpoint-ul cฤ doreศte sฤ obศinฤ date. Cu toate acestea, existฤ multe alte verbe disponibile, inclusiv POST, PUT ศi DELETE. Aศadar, รฎn cazul exemplului https://demo.guru99.com/employee/1, browserul web emite de fapt un verb GET deoarece doreศte sฤ obศinฤ detaliile รฎnregistrฤrii angajatului.
- Solicitaศi anteturi โ Acestea sunt instrucศiuni suplimentare trimise odatฤ cu solicitarea. Acestea pot defini tipul de rฤspuns necesar sau detaliile de autorizare.
- Organismul de solicitare โ Acestea sunt datele trimise odatฤ cu cererea. Datele sunt trimise รฎn mod normal รฎn corpul cererii atunci cรขnd o cerere POST este fฤcutฤ cฤtre serviciul web REST. รntr-un apel POST, clientul spune serviciului web REST cฤ doreศte sฤ adauge o resursฤ la server. Prin urmare, corpul cererii ar conศine detaliile resursei care trebuie adฤugatฤ.
- Corpul de rฤspuns โ Acesta este corpul principal al rฤspunsului. Aศadar, รฎn exemplul nostru de API RESTful, dacฤ am interoga serverul web prin intermediul cererii https://demo.guru99.com/employee/1, serverul web ar putea returna un document XML cu toate detaliile angajatului รฎn corpul rฤspunsului.
- Codurile de stare de rฤspuns โ Acestea sunt codurile generale returnate รฎmpreunฤ cu rฤspunsul de la serverul web. Un exemplu este codul 200, care este returnat รฎn mod normal atunci cรขnd nu existฤ nicio eroare la returnarea unui rฤspuns cฤtre client.
Metode odihnitoare
Diagrama de mai jos prezintฤ majoritatea verbelor (POST, GET, PUT ศi DELETE) ศi un exemplu REST API despre ce ar รฎnsemna acestea.
Sฤ presupunem cฤ avem un serviciu web RESTful definit la locaศia https://demo.guru99.com/employeeCรขnd clientul face o cerere cฤtre acest serviciu web, poate specifica oricare dintre verbele HTTP normale GET, POST, DELETE ศi PUT. Mai jos este prezentat ce s-ar รฎntรขmpla dacฤ verbele respective ar fi trimise de client.
- POST โ Aceasta ar fi utilizatฤ pentru a crea un nou angajat folosind serviciul web RESTful.
- GET โ Aceasta ar fi utilizatฤ pentru a obศine o listฤ a tuturor angajaศilor care utilizeazฤ serviciul web RESTful.
- PUT โ Aceasta ar fi utilizatฤ pentru a actualiza toศi angajaศii care utilizeazฤ serviciul web RESTful.
- DELETE โ Aceasta ar fi utilizatฤ pentru a ศterge toศi angajaศii care utilizeazฤ serviciul RESTful.
Acum sฤ privim din perspectiva unei singure รฎnregistrฤri. Sฤ presupunem cฤ existฤ o รฎnregistrare de angajat cu numฤrul de angajat 1. Urmฤtoarele acศiuni ar avea semnificaศiile lor respective.
- POST โ Acest lucru nu ar fi aplicabil, deoarece preluฤm datele angajatului 1, care este deja creat.
- GET โ Aceasta ar fi utilizatฤ pentru a obศine detaliile angajatului cu numฤrul de angajat 1 utilizรขnd serviciul web RESTful.
- PUT โ Aceasta ar fi utilizatฤ pentru a actualiza detaliile angajatului cu numฤrul de angajat 1 utilizรขnd serviciul web RESTful.
- DELETE โ Aceastฤ funcศie este utilizatฤ pentru a ศterge detaliile angajatului cu numฤrul de angajat 1.
Odihnitor Architecturฤ
O aplicaศie sau arhitecturฤ consideratฤ RESTful sau รฎn stil REST are urmฤtoarele caracteristici.
1. Starea ศi funcศionalitatea sunt รฎmpฤrศite รฎn resurse distribuite โ Aceasta รฎnseamnฤ cฤ fiecare resursฤ ar trebui sฤ fie accesibilฤ prin comenzile HTTP normale GET, POST, PUT sau DELETE. Aศadar, dacฤ cineva doreศte sฤ obศinฤ un fiศier de pe un server, ar trebui sฤ poatฤ emite solicitarea GET ศi sฤ obศinฤ fiศierul. Dacฤ doreศte sฤ punฤ un fiศier pe server, ar trebui sฤ poatฤ emite fie solicitarea POST, fie solicitarea PUT. รn cele din urmฤ, dacฤ doreศte sฤ ศteargฤ un fiศier de pe server, poate emite solicitarea DELETE.
2. Arhitectura este client/server, fฤrฤ stare, stratificatฤ ศi suportฤ memorarea รฎn cache.
- Client-server este arhitectura tipicฤ รฎn care serverul poate fi serverul web care gฤzduieศte aplicaศia, iar clientul poate fi la fel de simplu ca browserul web.
- Apatrid รฎnseamnฤ cฤ starea aplicaศiei nu este menศinutฤ รฎn REST. De exemplu, dacฤ ศtergeศi o resursฤ de pe un server utilizรขnd comanda DELETE, nu vฤ puteศi aศtepta ca informaศiile de ศtergere sฤ fie transmise la urmฤtoarea cerere.
Pentru a vฤ asigura cฤ resursa este ศtearsฤ, va trebui sฤ emiteศi cererea GET. Cererea GET ar fi utilizatฤ mai รฎntรขi pentru a obศine toate resursele de pe server, dupฤ care ar trebui sฤ verificaศi dacฤ resursa a fost รฎntr-adevฤr ศtearsฤ.
Principii ศi constrรขngeri RESTFul
Arhitectura REST se bazeazฤ pe cรขteva caracteristici, care sunt detaliate mai jos. Orice serviciu web RESTful trebuie sฤ respecte caracteristicile de mai jos pentru a putea fi numit RESTful. Aceste caracteristici sunt cunoscute ศi sub denumirea de principii de proiectare care trebuie respectate atunci cรขnd se lucreazฤ cu servicii bazate pe RESTful.
Aceasta este cea mai fundamentalฤ cerinศฤ a unei arhitecturi bazate pe REST. รnseamnฤ cฤ serverul va avea un serviciu web RESTful care oferฤ funcศionalitatea necesarฤ clientului. Clientul trimite o cerere cฤtre serviciul web de pe server. Serverul fie respinge cererea, fie se conformeazฤ ศi oferฤ un rฤspuns adecvat clientului.
- apatrid
Conceptul de โstatelessโ รฎnseamnฤ cฤ depinde de client sฤ se asigure cฤ toate informaศiile necesare sunt furnizate serverului. Acest lucru este necesar pentru ca serverul sฤ poatฤ procesa rฤspunsul รฎn mod corespunzฤtor. Serverul nu ar trebui sฤ pฤstreze niciun fel de informaศii รฎntre solicitฤrile clientului. Este o secvenศฤ รฎntrebare-rฤspuns foarte simplฤ ศi independentฤ. Clientul pune o รฎntrebare, iar serverul rฤspunde รฎn mod corespunzฤtor. Cรขnd clientul pune o altฤ รฎntrebare, serverul nu รฎศi va aminti scenariul anterior de รฎntrebare-rฤspuns ศi va trebui sฤ rฤspundฤ independent la noua รฎntrebare.
- Cache
Conceptul de memorie cache ajutฤ la rezolvarea problemei lipsei de stare descrisฤ la ultimul punct. Deoarece fiecare solicitare server-client este independentฤ prin natura sa, uneori clientul ar putea solicita serverului aceeaศi solicitare din nou, chiar dacฤ a solicitat-o โโdeja รฎn trecut. Aceastฤ solicitare va merge la server, iar serverul va oferi un rฤspuns, ceea ce creศte traficul รฎn reศea. Memoria cache este un concept implementat pe client pentru a stoca solicitฤrile care au fost deja trimise cฤtre server. Aศadar, dacฤ aceeaศi solicitare este trimisฤ de client, รฎn loc sฤ meargฤ la server, aceasta va merge รฎn memoria cache ศi va obศine informaศiile necesare. Acest lucru economiseศte traficul de reศea dus-รฎntors de la client la server.
- Sistem stratificat
Conceptul unui sistem stratificat este acela cฤ orice strat suplimentar, cum ar fi un strat middleware, poate fi inserat รฎntre client ศi serverul care gฤzduieศte serviciul web RESTFul. (Strat middleware este locul unde este creatฤ toatฤ logica de business. Acesta poate fi un serviciu suplimentar cu care clientul interacศioneazฤ รฎnainte de a apela serviciul web.) Dar introducerea acestui strat trebuie sฤ fie transparentฤ, astfel รฎncรขt sฤ nu perturbe interacศiunea dintre client ศi server.
- Interfaศฤ/Uniformฤ Contract
Aceasta este tehnica de bazฤ a modului รฎn care ar trebui sฤ funcศioneze serviciile web RESTful. RESTful funcศioneazฤ practic pe stratul web HTTP ศi foloseศte verbele cheie de mai jos pentru a lucra cu resursele de pe server.
- POST โ Pentru a crea o resursฤ pe server.
- GET โ Pentru a prelua o resursฤ de pe server.
- PUT โ Pentru a schimba starea unei resurse sau pentru a o actualiza.
- ศTERGERE โ Pentru a elimina sau ศterge o resursฤ de pe server.
REST vs SOAP: Diferenศe cheie
Dezvoltatorii adesea evalueazฤ REST faศฤ de SOAP atunci cรขnd proiecteazฤ un serviciu web. Ambele permit aplicaศiilor distribuite sฤ comunice, dar diferฤ puternic รฎn ceea ce priveศte filosofia. REST este un stil arhitectural care foloseศte verbe HTTP simple ศi formate uศoare precum JSON, รฎn timp ce SOAP este un protocol strict care se bazeazฤ pe plicuri XML ศi o รฎnศelegere formalฤtract. Tabelul de mai jos prezintฤ pe scurt cele mai importante distincศii.
| Aspect | REST | SOAP |
|---|---|---|
| Tip | Archistil textural | Protocol strict |
| Format date | JSON, XML, text simplu, HTML | Numai XML |
| Transport | Numai HTTP | HTTP, SMTP, TCP ศi altele |
| Stat | apatrid | Apatrid sau cu stat |
| Performanลฃฤ | Mai rapid ศi mai uศor | Mai greu din cauza supraรฎncฤrcฤrii XML |
| Cel mai bun pentru | API-uri web, mobile ศi publice | Aplicaศii pentru รฎntreprinderi care necesitฤ securitate strictฤ |
รn practicฤ, REST este alegerea implicitฤ pentru API-urile web ศi mobile publice, deoarece este mai rapid ศi mai uศor de utilizat, รฎn timp ce SOAP rฤmรขne util pentru sistemele enterprise care necesitฤ securitate รฎncorporatฤ ศi confidenศialitate formalฤ.tracts.
Creaศi primul serviciu web Restful รฎn ASP.NET
Acum, รฎn acest tutorial REST API, vom รฎnvฤศa cum sฤ creฤm un serviciu web Restful รฎn ASP.NET.
Serviciile web pot fi create รฎntr-o varietate de limbaje, iar multe medii de dezvoltare integrate pot fi utilizate pentru a crea servicii bazate pe REST.
รn acest exemplu de API RESTful, vom crea aplicaศia noastrฤ REST รฎn .NET folosind Visual Studio. Vom avea un serviciu web Restful care va lucra cu setul de date de mai jos.
Setul de date de mai jos reprezintฤ un exemplu de API REST al unei companii care expune tutorialele pe care le are pe baza Tutorialid-ului.
| Tutorialid | TutorialName |
|---|---|
| 0 | Arrays |
| 1 | cozile |
| 2 | Stive |
รn exemplul nostru de tutorial REST API, vom implementa verbele Restful de mai jos.
- GET Tutorial โ Cรขnd un client invocฤ aceastฤ API Restful, i se va oferi รฎntregul set de tutoriale disponibile de la serviciul web.
- GET Tutorial/Tutorialid โ Cรขnd un client invocฤ aceastฤ API Restful, i se va atribui numele tutorialului pe baza Tutorialid-ului trimis de client.
- POST Tutorial/Tutorialname โ Cรขnd un client invocฤ aceastฤ API Restful, clientul va trimite o cerere pentru a insera un nume de tutorial. Serviciul web va adฤuga apoi numele tutorialului trimis la colecศie.
- DELETE Tutorial/Tutorialid โ Cรขnd un client invocฤ aceastฤ API Restful, clientul va trimite o cerere de ศtergere a unui Tutorialname pe baza Tutorialid. Serviciul web va ศterge apoi numele tutorialului trimis din colecศie.
Sฤ urmฤm paศii de mai jos pentru a crea primul nostru serviciu web RESTful, care realizeazฤ implementarea de mai sus.
Cum sฤ creaศi primul serviciu web odihnitor
Pas 1) Creaศi un nou proiect.
Primul pas este sฤ creaศi un gol Asp.Net aplicaศie web. Din Visual Studio 2013, faceศi clic pe opศiunea de meniu Fiศier->Proiect nou.
Dupฤ ce faceศi clic pe opศiunea Proiect nou, Visual Studio vฤ va afiศa o altฤ casetฤ de dialog pentru alegerea tipului de proiect ศi introducerea detaliilor necesare. Acest lucru este explicat รฎn pasul urmฤtor.
Pas 2) Introduceศi numele ศi locaศia proiectului.
- Asiguraศi-vฤ cฤ alegeศi mai รฎntรขi C# ศablon web al aplicaศiei web ASP.NET. Proiectul trebuie sฤ fie de acest tip pentru a crea un proiect de servicii web. Alegรขnd aceastฤ opศiune, Visual Studio va efectua paศii necesari pentru a adฤuga fiศierele necesare pentru orice aplicaศie web.
- Daศi un nume proiectului dumneavoastrฤ, care รฎn cazul nostru este โWebservice.RESTโ.
- Apoi, asiguraศi-vฤ cฤ specificaศi o locaศie unde vor fi stocate fiศierele proiectului.
Dupฤ ce aศi terminat, veศi vedea fiศierul de proiect creat รฎn exploratorul de soluศii din Visual Studio 2013.
Pas 3) Creaศi fiศierul serviciului web.
Urmฤtorul pas este crearea fiศierului de serviciu web care va conศine serviciul web RESTful.
- Mai รฎntรขi, faceศi clic dreapta pe fiศierul proiectului, aศa cum se aratฤ mai jos.
- รn aceastฤ etapฤ,
- Faceศi clic dreapta pe fiศierul proiectului.
- Alegeศi opศiunea โAdฤugaศi->Element nouโ.
รn caseta de dialog care apare, trebuie sฤ efectuaศi urmฤtoarele acศiuni.
- Alegeศi opศiunea Serviciu WCF (compatibil cu Ajax). Alegerea unui fiศier de acest tip determinฤ Visual Studio sฤ adauge cod de bazฤ care vฤ ajutฤ sฤ creaศi un serviciu web RESTful. WCF este prescurtarea de la Windows Comunicarea FoundationWCF este o bibliotecฤ pentru aplicaศii de pe diverse platforme (sau de pe aceeaศi platformฤ) pentru a comunica prin diverse protocoale precum TCP, HTTP ศi HTTPS. Ajax este asincron. JavaScenariu ศi XML. AJAX permite paginilor web sฤ fie actualizate asincron prin schimbul de cantitฤศi mici de date cu serverul din culise.
- Apoi, daศi un nume pentru serviciu, care รฎn cazul nostru este TutorialService.
- รn cele din urmฤ, faceศi clic pe butonul Adฤugaศi pentru a adฤuga serviciul la soluศie.
Pas 4) Faceศi o configuraศie.
Urmฤtorul pas este sฤ faceศi o modificare de configuraศie pentru a permite acestui proiect sฤ funcศioneze cu servicii web RESTful. Aceasta necesitฤ o modificare a fiศierului numit Web.configAcest fiศier apare รฎn aceeaศi fereastrฤ ca ศi fiศierul proiectului Webservice. Fiศierul Web.config conศine toate configuraศiile care fac ca aplicaศia web sฤ funcศioneze aศa cum ar trebui. Modificarea fฤcutฤ permite aplicaศiei sฤ trimitฤ ศi sฤ primeascฤ date ca un serviciu web RESTful pur.
- Faceศi clic pe fiศierul Web.config pentru a deschide codul.
- Gฤsiศi linia .
- Schimbaศi linia la .
Pas 5) Adฤugaศi codul nostru pentru implementare.
Urmฤtorul pas este sฤ adฤugฤm codul nostru pentru implementare. Tot codul de mai jos trebuie scris รฎn fiศierul TutorialService.svc.
- Primul pas este sฤ adฤugฤm codul care sฤ reprezinte datele noastre, care vor fi utilizate รฎn programul nostru. Aศadar, vom avea o listฤ de variabile de tip ศir de caractere cu valorile โArraysโ, โQueuesโ ศi โStacksโ. Acestea vor reprezenta numele tutorialelor disponibile prin intermediul serviciului nostru web de gฤzduire.
namespace Webservice.REST { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class TutorialService { private static List<String> lst = new List<String> (new String[] {"Arrays","Queues","Stacks"});
Pas 6) Definiศi codul pentru metoda noastrฤ GET.
รn continuare, vom defini codul pentru metoda noastrฤ GET. Acest cod va fi, de asemenea, รฎn acelaศi fiศier TutorialService.svc. Acest cod va rula de fiecare datฤ cรขnd apelฤm serviciul din browserul nostru.
Metoda de mai jos va fi utilizatฤ pentru a รฎndeplini scenariul de mai jos.
- Dacฤ un utilizator doreศte o listฤ cu toate tutorialele disponibile, atunci ar trebui scris codul de mai jos pentru a realiza acest lucru.
[WebGet(UriTemplate = "/Tutorial")] public String GetAllTutorial() { int count = lst.Count; String TutorialList = ""; for (int i = 0; i < count; i++) TutorialList = TutorialList + lst[i] + ","; return TutorialList; }
Code Explicaลฃie:-
- Prima linie de cod este cea mai importantฤ. Este folositฤ pentru a defini cum putem apela aceastฤ metodฤ printr-un URLDeci, dacฤ linkul cฤtre serviciul nostru web este http://localhost:52645/TutorialService.svc ศi adฤugฤm โ/Tutorialโ la URL, ca รฎn http://localhost:52645/TutorialService.svc/Tutorial, codul de mai sus va fi invocat. Atributul โWebGetโ este un parametru care permite acestei metode sฤ fie o metodฤ RESTful, astfel รฎncรขt sฤ poatฤ fi invocatฤ prin intermediul verbului GET.
- Aceastฤ secศiune de cod este folositฤ pentru a parcurge lista noastrฤ de ศiruri din variabila โlstโ ศi a le returna pe toate programului apelant.
Pas 7) Returneazฤ rezultatul.
Codul de mai jos asigurฤ cฤ, dacฤ se efectueazฤ un apel GET cฤtre serviciul Tutorial cu un ID Tutorial, acesta va returna numele tutorialului corespunzฤtor pe baza ID-ului Tutorial.
[WebGet(UriTemplate = "/Tutorial/{Tutorialid}")] public String GetTutorialbyID(String Tutorialid) { int pid; Int32.TryParse(Tutorialid, out pid); return lst[pid]; }
Code Explicaลฃie:-
- Prima linie de cod este cea mai importantฤ. Defineศte cum putem apela aceastฤ metodฤ printr-un URLDeci, dacฤ linkul cฤtre serviciul nostru web este http://localhost:52645/TutorialService.svc ศi adฤugฤm โ/Tutorial/{Tutorialid}โ la URL, am putea apela serviciul web ca http://localhost:52645/TutorialService.svc/Tutorial/1, de exemplu. Serviciul web ar returna apoi numele tutorialului care avea ID-ul tutorialului 1.
- Aceastฤ secศiune de cod este utilizatฤ pentru a returna numele tutorialului al cฤrui ID de tutorial a fost transmis metodei web.
- รn mod implicit, ceea ce trebuie reศinut este cฤ tot ceea ce este transmis cฤtre URL รฎn browser este un ศir de caractere.
- Dar trebuie sฤ reศineศi cฤ indexul listei noastre trebuie sฤ fie un numฤr รฎntreg, aศa cฤ adฤugฤm codul necesar pentru a converti mai รฎntรขi Tutorialid-ul รฎntr-un numฤr รฎntreg.
- Apoi รฎl folosim pentru a accesa poziศia indexului din lista noastrฤ ศi a returna valoarea programului apelant รฎn consecinศฤ.
Pas 8) Scrieศi codul pentru metoda POST.
Urmฤtorul pas este sฤ scriem codul pentru metoda noastrฤ POST. Aceastฤ metodฤ va fi invocatฤ ori de cรขte ori dorim sฤ adฤugฤm o valoare de tip ศir de caractere la lista noastrฤ de tutoriale prin intermediul metodei POST. De exemplu, dacฤ aศi dori sฤ adฤugaศi numele tutorialului โTestare softwareโ, atunci ar trebui sฤ utilizaศi metoda POST.
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/Tutorial/{str}")] public void AddTutorial(String str) { lst.Add(str); }
Code Explicaลฃie:-
- Prima linie este atributul โWebInvokeโ, care a fost ataศat metodei noastre. Aceasta permite invocarea metodei prin apelul POST. Atributele RequestFormat ศi ResponseFormat trebuie menศionate ca JSON, deoarece atunci cรขnd se posteazฤ valori รฎntr-un serviciu web RESTFul, valorile trebuie sฤ fie รฎn acest format.
- A doua linie de cod este utilizatฤ pentru a adฤuga valoarea ศirului de caractere transmisฤ prin apelul POST la lista noastrฤ existentฤ de ศiruri de caractere din tutorial.
Pas 9) Adฤugaศi o metodฤ pentru a gestiona operaศia DELETE.
รn cele din urmฤ, vom adฤuga metoda noastrฤ pentru a gestiona operaศia DELETE. Aceastฤ metodฤ va fi invocatฤ ori de cรขte ori dorim sฤ ศtergem o valoare ศir existentฤ din lista noastrฤ de tutoriale prin intermediul metodei DELETE.
[WebInvoke(Method = "DELETE", RequestFormat = WebMessageFormat.Json, UriTemplate = "/Tutorial/{Tutorialid}", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] public void DeleteTutorial(String Tutorialid) { int pid; Int32.TryParse(Tutorialid, out pid); lst.RemoveAt(pid); }
Code Explicaลฃie:-
- Prima linie este atributul โWebInvokeโ, care a fost ataศat metodei noastre. Aceasta permite invocarea metodei prin apelul DELETE. Atributele RequestFormat ศi ResponseFormat trebuie menศionate ca JSON, deoarece valorile trebuie sฤ fie รฎn acest format. Reศineศi cฤ parametrul Method este setat la โDELETEโ. Aceasta รฎnseamnฤ cฤ, de fiecare datฤ cรขnd emitem verbul DELETE, aceastฤ metodฤ va fi invocatฤ.
- A doua linie de cod este folositฤ pentru a prelua Tutorialid-ul trimis prin apelul DELETE ศi, ulterior, pentru a ศterge acel id din lista noastrฤ. (Cel Int32 Funcศia din cod este utilizatฤ pentru a converti ID-ul Tutorialului dintr-o variabilฤ ศir de caractere รฎntr-un numฤr รฎntreg.)
Rularea primului serviciu web Restful
Acum, cฤ am creat รฎntregul nostru serviciu web รฎn secศiunea de mai sus, haideศi sฤ vedem cum putem rula serviciul Tutorial astfel รฎncรขt sฤ poatฤ fi invocat de la orice client.
Pentru a rula serviciul web, vฤ rugฤm sฤ urmaศi paศii de mai jos.
Pas 1) Faceศi clic dreapta pe fiศierul proiectului โ Webservice.REST.
Pas 2) Alegeศi opศiunea de meniu โSetare ca proiect de pornireโ. Aceasta va asigura cฤ acest proiect este rulat atunci cรขnd Visual Studio ruleazฤ รฎntreaga soluศie.
Pas 3) Urmฤtorul pas este rularea proiectului รฎn sine. รn funcศie de browserul implicit instalat pe sistem, numele browserului corespunzฤtor va apฤrea lรขngฤ butonul de rulare din Visual Studio. รn cazul nostru, avem Google Chrome apฤrรขnd. Doar faceศi clic pe acest buton.
Ieศire: -
Cรขnd proiectul este rulat, puteศi naviga la secศiunea TutorialService.svc/Tutorial ศi veศi obศine rezultatul de mai jos.
รn rezultatul de mai sus,
- Puteศi observa cฤ browserul invocฤ verbul โGETโ ศi executฤ metoda โGetAllTutorialโ รฎn serviciul web. Acest modul este utilizat pentru a afiศa toate tutorialele expuse de serviciul nostru web.
Testarea primului serviciu web Restful
รn secศiunea de mai sus, am vฤzut deja cum se foloseศte browserul pentru a executa verbul โGETโ ศi a invoca โGetAllTutorialโ.
- Sฤ folosim acum browserul pentru a executa urmฤtorul scenariu de caz de utilizare.
GET Tutorial/Tutorialid โ Cรขnd un client invocฤ aceastฤ API Restful, i se va atribui numele tutorialului pe baza Tutorialid-ului trimis de client.
รn browser, adฤugaศi ศirul /1 dupฤ cuvรขntul Tutorial din URLDacฤ apฤsaศi butonul Enter, veศi obศine rezultatul de mai jos.
Acum veศi vedea rezultatul โQueuesโ (Cozi), care corespunde numฤrului 1 din lista noastrฤ de ศiruri de tutoriale. Aceasta รฎnseamnฤ cฤ metoda โGetTutorialbyIDโ este acum invocatฤ din serviciul nostru web. De asemenea, aratฤ cฤ valoarea 1 este transmisฤ cu succes prin intermediul browserului cฤtre serviciul nostru web ศi cฤtre metoda noastrฤ ศi de aceea obศinem valoarea corectฤ corespunzฤtoare a โQueuesโ (Cozi) รฎn browser.
- รn continuare, haideศi sฤ consumฤm serviciul nostru web executรขnd scenariul de mai jos. Pentru aceasta, trebuie sฤ instalaศi instrumentul numit Fiddler, care este un instrument care poate fi descฤrcat gratuit.
POST Tutorial/NumeTutorial โ Cรขnd un client invocฤ aceastฤ API Restful, clientul va trimite o cerere pentru a insera un NumeTutorial. Serviciul web va adฤuga apoi numele tutorialului trimis la colecศie.
Porneศte Fiddler instrumentul ศi urmaศi paศii de mai jos.
- Accesaศi secศiunea compozitor. Aceasta este folositฤ pentru a crea cereri care pot fi trimise cฤtre orice aplicaศie web.
- Asiguraศi-vฤ cฤ tipul cererii este โPOSTโ ศi cฤ este corect URL este lovit, ceea ce รฎn cazul nostru ar trebui sฤ fie http://localhost:52645/TutorialService.svc/Tutorial.
- Asiguraศi-vฤ cฤ tipul de conศinut este marcat ca application/json. Reศineศi cฤ metoda noastrฤ de solicitare POST din serviciul nostru web acceptฤ doar date รฎn stil JSON, aศa cฤ trebuie sฤ ne asigurฤm cฤ acest lucru este specificat atunci cรขnd trimitem o solicitare cฤtre aplicaศia noastrฤ.
- รn cele din urmฤ, trebuie sฤ introducem datele noastre. Reศineศi cฤ metoda noastrฤ pentru POST acceptฤ un parametru numit โstrโ. Aศadar, specificฤm aici cฤ dorim sฤ adฤugฤm o valoare numitฤ โTreesโ la colecศia noastrฤ de nume de tutoriale ศi sฤ ne asigurฤm cฤ este etichetatฤ la numele variabilei โstrโ.
รn cele din urmฤ, faceศi clic pe butonul Execute รฎn Fiddler. Aceasta va trimite o solicitare cฤtre serviciul web pentru a POSTฤ datele โArboriโ รฎn serviciul nostru web.
Acum, cรขnd navigฤm la Tutorial URL Pentru a afiศa toate ศirurile din lista tutorialului nostru, veศi vedea cฤ este prezentฤ ศi valoarea โTreesโ. Aceasta aratฤ cฤ solicitarea POST cฤtre serviciul web a fost executatฤ cu succes ศi cฤ a fost adฤugatฤ cu succes รฎn lista tutorialului nostru.
- รn continuare, sฤ consumฤm serviciul nostru web executรขnd scenariul de mai jos. Pentru aceasta, trebuie sฤ folosim ศi Fiddler instrument.
ศTERGERE Tutorial/Tutorialid โ Cรขnd un client invocฤ aceastฤ API Restful, clientul va trimite o cerere de ศtergere a unui Tutorialname pe baza Tutorialid-ului. Serviciul web va ศterge apoi numele tutorialului trimis din colecศie.
Porneศte Fiddler instrumentul ศi urmaศi paศii de mai jos.
- Accesaศi secศiunea compozitor. Aceasta este folositฤ pentru a crea cereri care pot fi trimise cฤtre orice aplicaศie web.
- Asiguraศi-vฤ cฤ tipul solicitฤrii este โศTERGEREโ ศi cฤ este corect URL este lovit, ceea ce รฎn cazul nostru ar trebui sฤ fie http://localhost:52645/TutorialService.svc/TutorialAsiguraศi-vฤ cฤ ID-ul folosit pentru ศtergerea unui ศir de caractere din listฤ este trimis prin intermediul URL ca parametru. รn exemplul nostru REST, trimitem 1, deci acest lucru va ศterge 2nd element din colecศia noastrฤ, care este โCoziโ.
รn cele din urmฤ, faceศi clic pe butonul Execute รฎn FiddlerAceasta va trimite o solicitare cฤtre serviciul web pentru a ศTERGE โCozileโ de date din serviciul nostru web.
Acum, cรขnd navigฤm la Tutorial URL Pentru a afiศa toate ศirurile din lista tutorialului nostru, veศi observa cฤ valoarea โQueuesโ nu mai este prezentฤ.
Aceasta aratฤ cฤ solicitarea DELETE cฤtre serviciul web a fost executatฤ cu succes. Elementul cu indexul numฤrul 1 din lista noastrฤ de ศiruri de text din tutorial a fost ศters cu succes.
Cele mai bune practici pentru API-urile RESTful
Construirea unei API REST funcศionale este doar primul pas; construirea uneia care se scaleazฤ ศi rฤmรขne uศor de รฎntreศinut necesitฤ disciplinฤ. Practicile de mai jos ajutฤ la menศinerea endpoint-urilor previzibile, sigure ศi uศor de utilizat pentru alศi dezvoltatori ศi agenศi de inteligenศฤ artificialฤ.
- Foloseศte substantive, nu verbe, รฎn URLs. Puncte finale precum /angajaศi/1 sunt mai clare decรขt /getEmployee?id=1, deoarece verbul HTTP descrie deja acศiunea.
- Returneazฤ coduri de stare semnificative. Trimiteศi 200 pentru succes, 201 pentru o resursฤ creatฤ, 400 pentru o cerere greศitฤ, 401 pentru acces neautorizat, 404 pentru o resursฤ lipsฤ ศi 500 pentru erori de server.
- Versioneazฤ-ศi API-ul. Adฤugarea unui segment de versiune, cum ar fi /v1/ รฎn cale vฤ permite sฤ evoluaศi serviciul fฤrฤ a afecta clienศii existenศi.
- Securizeazฤ fiecare punct final. Foloseศte HTTPS, รฎmpreunฤ cu chei API sau token-uri OAuth 2.0 ศi valideazฤ toate datele de intrare.
- Suportฤ paginarea ศi filtrarea. Returnarea colecศiilor mari รฎn pagini menศine rฤspunsurile rapide ศi reduce รฎncฤrcarea serverului.
Respectarea acestor convenศii face ca serviciul web RESTful sฤ fie intuitiv de integrat, indiferent dacฤ consumatorul este o aplicaศie mobilฤ, un sistem partener sau un flux de lucru automatizat bazat pe inteligenศฤ artificialฤ.




























