REST-szolgáltatás használata a HttpClient használatával
Számos modern webszolgáltatás implementálja a REST architektúrát. Ez a struktúra lehetővé teszi, hogy egy webszolgáltatás jól definiált végpontokon keresztül tegye elérhetővé a műveleteket és az adatokat. Azok a kérések, amelyeket az ügyfélalkalmazások egy REST-webszolgáltatásnak küldenek adatok lekérésére, módosítására vagy létrehozására vagy törlésére, előre definiált igekészletet használnak. A REST webszolgáltatás szabványos módon válaszol ezekre a kérésekre. Ez a megközelítés megkönnyíti az ügyfélalkalmazások készítését.
A REST-modell a HTTP protokollra épül. A .NET MAUI-alkalmazások az osztály használatával HttpClient
küldhetnek kéréseket egy REST-webszolgáltatásnak. Ebben a leckében megismerkedhet HttpClient
a REST-webszolgáltatásokkal való interakcióval, és megtudhatja, hogyan használhatja azt.
Mi az a HttpClient-osztály?
HttpClient
Egy .NET-osztály, amellyel az alkalmazás HTTP-kéréseket küldhet, és HTTP-válaszokat fogadhat egy REST-webszolgáltatástól. Az URI-k halmaza azonosítja a webszolgáltatás által közzétett erőforrásokat. Az URI egyesíti a webszolgáltatás címét az adott címen elérhető erőforrás nevével.
Az HttpClient
osztály feladatalapú API-t használ a teljesítményhez, és hozzáférést biztosít a kérelemüzenetekben szereplő információkhoz, például HTTP-fejlécekhez és állapotkódokhoz, valamint az elküldött és fogadott tényleges adatokat tartalmazó üzenettörzsekhez.
Az HttpClient
osztály elérhető a System.Net.Http
névtérben. Az alkalmazások az alapértelmezett konstruktor használatával hozhatnak létre HttpClient
objektumokat:
using System.Net.Http;
...
var client = new HttpClient();
CRUD-műveletek végrehajtása HttpClient-objektummal
A REST webszolgáltatás lehetővé teszi, hogy az ügyfél HTTP-parancsok halmazán keresztül hajtson végre műveleteket az adatokon. A HTTP-parancs feladata, hogy jelezze az erőforráson végrehajtandó kívánt műveletet. Számos HTTP-ige létezik, de a négy leggyakoribb a POST
, GET
, PUT
és DELETE
. A szolgáltatások implementálhatják ezeket az utasításokat, hogy az ügyfélalkalmazások a létrehozási, olvasási, frissítési és törlési (CRUD) műveletek végrehajtásával felügyelhessék az objektumok életciklusát az alábbiak szerint:
Az
POST
ige azt jelzi, hogy új erőforrást szeretne létrehozni.Az
GET
ige azt jelzi, hogy le szeretne kérni egy erőforrást.Az
PUT
ige azt jelzi, hogy frissíteni szeretne egy erőforrást.Az
DELETE
ige azt jelzi, hogy törölni szeretne egy erőforrást.
Új erőforrás létrehozása a HttpClient használatával
Ha új erőforrást szeretne létrehozni a használatával HttpClient
, használhatja azt a SendAsync
metódust, amely átad egy objektumot HttpRequestMessage
.
Ez HttpRequestMessage
a webszolgáltatásnak küldött kérés modellezésére szolgál. Megadhatja a HTTP-parancsot, a webszolgáltatás URL-címét, és feltöltheti a HttpRequestMessage.Content
tulajdonságon keresztül küldendő hasznos adatokat.
HttpClient client = new HttpClient();
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, url);
message.Content = JsonContent.Create<Part>(part);
HttpResponseMessage response = await client.SendAsync(message);
Ez a kódrészlet a következő feladatokat hajtja végre:
- Létrehoz egy úgynevezett ügyfélpéldányt
HttpClient
, amelyet üzenet küldéséhez használ. - Létrehoz egy úgynevezett üzenetpéldányt
HttpRequestMessage
, amelyet az üzenet modellezéséhez használ. Az üzenet http-igével és URL-címével rendelkezik. - A függvény használatával beállítja
Content
aHttpRequestMessage
tulajdonságotJsonContent.Create
. Ez a függvény automatikusan szerializálja az alkatrészváltozót a webszolgáltatásnak való küldésre alkalmas JSON-ra. - Az objektum használatával küldi el az
HttpClient
üzenetet. AHttpResponseMessage
rendszer egy olyan információt ad vissza, amely olyan információkat tartalmaz, mint az állapotkód és a webszolgáltatás által visszaadott információk.
Erőforrás olvasása a HttpClient használatával
Az erőforrást a korábban ismertetett módszerrel olvashatja el egy webszolgáltatásból, kivéve, ha inicializálja az HttpRequestMessage
erőforrást egy HttpMethod.Get
. A HttpClient
parancsikonokat azonban számos kényelmi módszer biztosítja.
Ha egy erőforrást a következő HTTPClient
példában látható módon szeretne beolvasni, használja a GetStringAsync
metódust:
HttpClient client = new HttpClient();
string text = await client.GetStringAsync("https://...");
A GetStringAsync
metódus egy URI-t használ, amely az erőforrásra hivatkozik, és sztringként ad vissza egy választ. A sztringválasz az alkalmazás által kért erőforrás. A válaszadat-formátum a kért szolgáltatás alapértelmezett formátuma, például JSON vagy XML. Az alkalmazás a fejléc hozzáadásával meg tudja mondani a webszolgáltatásnak, hogy egy adott formátumban kell visszaadnia az MediaTypeWithQualityHeaderValue
adatokat. Ha például az alkalmazás JSON formátumban kéri az adatok visszaküldését, a következő kódot használhatja:
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Ebben a példában az eredmény sztringként lesz visszaadva, és csak a válaszüzenet törzsét tartalmazza. A teljes válasz lekéréséhez, beleértve az élőfejeket, a törzset és az állapotkódot, hívja meg a metódust GetAsync
. Az adatok objektumként lesznek visszaadva HttpResponseMessage
.
Erőforrás frissítése a HttpClient használatával
Ha egy erőforrást put HttpClient
paranccsal szeretne frissíteni, használjon egy HttpRequestMessage
inicializáltat EGY PUT paranccsal. Az alábbi kód hasonló az új erőforrás létrehozásához szükséges kódhoz:
HttpClient client = new HttpClient();
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Put, url);
message.Content = JsonContent.Create<Part>(part);
HttpResponseMessage response = await client.SendAsync(message);
Megjegyzés:
Az alapvető különbség az idempotencia és PUT
az idempotencia közöttPOST
. Ha többször is megismételi ugyanazt PUT
a kérést, ugyanazt az erőforrást ugyanazokkal az adatokkal frissíti a rendszer, és az eredmény ugyanaz, mintha a kérést csak egyszer küldte volna el. Ha többször is kiadja ugyanazt POST
a kérést, az eredmény az lesz, hogy a REST szolgáltatás több példányt hoz létre az erőforrásból.
Erőforrás törlése a HttpClient használatával
Ha törölni szeretne egy erőforrást a DELETE HttpClient
paranccsalHttpRequestMessage
, inicializált hívással SendAsync
:
HttpClient client = new HttpClient();
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Delete, url);
HttpResponseMessage response = await client.SendAsync(message);
A válasz tartalmazza a fejléceket, az állapotkódot és a törölt objektumot.
Kérésből érkező válaszok kezelése
Minden HTTP-kérés válaszüzenetet ad vissza. A válaszban szereplő adatok az alkalmazás által küldött igétől függnek. Egy HTTP-kérés GET
választörzse például tartalmazza a kért erőforrás adatait.
A kérés választörzse POST
visszaadja a létrehozott erőforrás másolatát, de a kérés választörzsének PUT
üresnek kell lennie.
A válaszüzenetben mindig ellenőrizze és kezelje az állapotkódot. Ha ez az állapotkód a 200 tartományba tartozik (200, 201, 202 stb.), akkor a művelet sikeresnek minősül, bár később további információkra lehet szükség.
A 300-as tartomány állapotkódja azt jelzi, hogy a webszolgáltatás átirányíthatta a kérést egy másik címre, esetleg egy másik helyre áthelyezett erőforrás miatt.
A 400 tartomány állapotkódja ügyfél- vagy alkalmazáshibát jelez. A 403-at tartalmazó állapotkód például azt jelenti, hogy a webszolgáltatás megköveteli a felhasználó hitelesítését, de az alkalmazás még nem tette meg. A 404-s állapotkód akkor fordul elő, amikor az alkalmazás nem létező erőforrást próbál elérni.
Az 500-as tartomány állapotkódjai kiszolgálóoldali hibára utalnak, például a szolgáltatás nem érhető el, vagy túl elfoglalt a kérés kezeléséhez.
Az HttpResponseMessage
objektumon keresztül HttpClient
küldött kérés által visszaadott objektum a különböző állapotkódok kezelésének összetettségének nagy részét elvonhatja. Ez a kódrészlet bemutatja, hogyan ellenőrizheti, hogy a válaszüzenetben szereplő állapotkód sikeres-e, és hogyan kezelheti a valamilyen hibát jelző állapotkódokat.
static readonly HttpClient client = new HttpClient();
...
// Call asynchronous network methods in a try/catch block to handle exceptions.
try
{
//... Initiate the HttpRequest
HttpResponseMessage response = await client.SendAsync(msg);
response.EnsureSuccessStatusCode(); // Check that the status code is in the 200 range. Throw an HttpRequestException if not
string responseBody = await response.Content.ReadAsStringAsync();
... // Handle the response
}
catch(HttpRequestException e)
{
... // Handle any status codes that indicate an error.
// The status code is available in the field e.StatusCode
}