Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Temsili Durum Aktarımı (REST), web hizmetleri oluşturmaya yönelik bir mimari stildir. REST istekleri genellikle web tarayıcılarının web sayfalarını almak ve sunuculara veri göndermek için kullandığı HTTP fiilleri kullanılarak HTTPS üzerinden yapılır. Fiiller şunlardır:
- GET – Bu işlem web hizmetinden veri almak için kullanılır.
- POST – Bu işlem web hizmetinde yeni bir veri öğesi oluşturmak için kullanılır.
- PUT – Bu işlem web hizmetindeki bir veri öğesini güncelleştirmek için kullanılır.
- PATCH – Bu işlem, öğenin nasıl değiştirilmesi gerektiğiyle ilgili bir dizi yönerge açıklanarak web hizmetindeki bir veri öğesini güncelleştirmek için kullanılır.
- DELETE – Bu işlem web hizmetindeki bir veri öğesini silmek için kullanılır.
REST'e bağlı web hizmeti API'leri şu şekilde tanımlanır:
- Temel URI.
- GET, POST, PUT, PATCH veya DELETE gibi HTTP yöntemleri.
- Veriler için JavaScript Nesne Gösterimi (JSON) gibi bir medya türü.
REST tabanlı web hizmetleri genellikle istemciye veri döndürmek için JSON iletilerini kullanır. JSON, veri gönderirken bant genişliği gereksinimlerinin azalmasına neden olan, kompakt yükler üreten metin tabanlı bir veri değişim biçimidir. REST'in basitliği, mobil uygulamalarda web hizmetlerine erişmek için birincil yöntem haline getirmesine yardımcı oldu.
Uyarı
Bir web hizmetine erişmek için genellikle zaman uyumsuz programlama gerekir. Zaman uyumsuz programlama hakkında daha fazla bilgi için bkz. Async ve await ile zaman uyumsuz programlama.
Web hizmeti işlemleri
Örnek REST hizmeti ASP.NET Core kullanılarak yazılır ve aşağıdaki işlemleri sağlar:
| Operation | HTTP yöntemi | Göreli URI | Parametreler |
|---|---|---|---|
| Yapılacaklar öğelerinin listesini alma | GET | /api/todoitems/ | |
| Yeni yapılacaklar öğesi oluşturma | PAYLAŞ | /api/todoitems/ | JSON biçimli TodoItem |
| Yapılacaklar öğesini güncelle | YERLEŞTİRMEK | /api/todoitems/ | JSON biçimli TodoItem |
| Bir yapılacaklar öğesini sil | DELETE | /api/todoitems/{id} |
.NET MAUI uygulaması ve web hizmeti, görüntülenen ve depolama için web hizmetine gönderilen verileri modellemek için sınıfını kullanır TodoItem :
public class TodoItem
{
public string ID { get; set; }
public string Name { get; set; }
public string Notes { get; set; }
public bool Done { get; set; }
}
ID özelliği her TodoItem nesneyi benzersiz olarak tanımlamak için kullanılır ve web hizmeti tarafından güncelleştirilecek veya silinecek verileri tanımlamak için kullanılır. Örneğin, kimliği aaaabbbb-0000-cccc-1111-dddd2222eeee olan TodoItem öğesini silmek için .NET MAUI uygulaması https://hostname/api/todoitems/aaaabbbb-0000-cccc-1111-dddd2222eeee adresine bir DELETE isteği gönderir.
Web API çerçevesi bir istek aldığında, isteği bir eyleme yönlendirir. Bu eylemler sınıfındaki TodoItemsController genel yöntemlerdir. Web API çerçevesi, gelen isteklerin URL'lerini eşleştirmek ve bunları eylemlerle eşlemek için yönlendirme ara yazılımını kullanır. REST API'leri, işlemleri HTTP fiilleri ile temsil edilen bir kaynak kümesi olarak uygulamanın işlevselliğini modellemek için öznitelik yönlendirmesini kullanmalıdır. Öznitelik yönlendirme, eylemleri doğrudan yol şablonlarıyla eşlemek için bir dizi öznitelik kullanır. Öznitelik yönlendirme hakkında daha fazla bilgi için bkz. REST API'leri için öznitelik yönlendirme. ASP.NET Core kullanarak REST hizmeti oluşturma hakkında daha fazla bilgi için bkz. Yerel mobil uygulamalar için arka uç hizmetleri oluşturma.
HTTPClient nesnesini oluşturma
.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulaması, sınıfıyla HttpClient web hizmetine istek göndererek REST tabanlı bir web hizmetini kullanabilir. Bu sınıf, TANıMLANAN bir URI kaynağından HTTP istekleri göndermek ve HTTP yanıtları almak için işlevsellik sağlar. Her istek zaman uyumsuz bir işlem olarak gönderilir.
Nesne, HttpClient uygulamanın HTTP istekleri yapması gerektiği sürece dayanması için sınıf düzeyinde bildirilmelidir:
public class RestService
{
HttpClient _client;
JsonSerializerOptions _serializerOptions;
public List<TodoItem> Items { get; private set; }
public RestService()
{
_client = new HttpClient();
_serializerOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
};
}
...
}
JsonSerializerOptions nesnesi, web hizmetinden alınan ve web hizmetine gönderilen JSON yükünün biçimlendirmesini yapılandırmak için kullanılır. Daha fazla bilgi için bkz. How to instantiate JsonSerializerOptions instances with System.Text.Json.
Veri al
HttpClient.GetAsync yöntemi, URI tarafından belirtilen web hizmetine get isteği göndermek ve ardından yanıtı web hizmetinden almak için kullanılır:
public async Task<List<TodoItem>> RefreshDataAsync()
{
Items = new List<TodoItem>();
Uri uri = new Uri(string.Format(Constants.RestUrl, string.Empty));
try
{
HttpResponseMessage response = await _client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
Items = JsonSerializer.Deserialize<List<TodoItem>>(content, _serializerOptions);
}
}
catch (Exception ex)
{
Debug.WriteLine(@"\tERROR {0}", ex.Message);
}
return Items;
}
Veriler web hizmetinden nesne HttpResponseMessage olarak alınır. Durum kodu, üst bilgiler ve herhangi bir gövde dahil olmak üzere yanıt hakkındaki bilgileri içerir. REST hizmeti, HTTP isteğinin başarılı veya başarısız olup olmadığını belirtmek için yanıtında HttpResponseMessage.IsSuccessStatusCode özelliğinden alınabilen bir HTTP durum kodu gönderir. Bu işlem için REST hizmeti, isteğin başarılı olduğunu ve istenen bilgilerin yanıtta olduğunu belirten HTTP durum kodu 200 'i (Tamam) yanıta gönderir.
HTTP işlemi başarılı olursa yanıtın içeriği okunur.
HttpResponseMessage.Content özelliği yanıtın içeriğini temsil eder ve türündedirHttpContent.
HttpContent sınıfı, HTTP gövdesini ve Content-Type ile Content-Encoding gibi içerik üst bilgilerini temsil eder. İçerik daha sonra HttpContent.ReadAsStringAsync yöntemi kullanılarak string öğesine okunur.
string daha sonra JSON'dan TodoItem nesnelerinin bir List'ine seriden çıkarılır.
Uyarı
ReadAsStringAsync Büyük bir yanıt almak için yönteminin kullanılması performansı olumsuz etkileyebilir. Bu gibi durumlarda, tam arabelleğe almak zorunda kalmamak için yanıt doğrudan deserilize edilmelidir.
Veri oluşturma
HttpClient.PostAsync yöntemi, URI tarafından belirtilen web hizmetine post isteği göndermek ve ardından yanıtı web hizmetinden almak için kullanılır:
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
Uri uri = new Uri(string.Format(Constants.RestUrl, string.Empty));
try
{
string json = JsonSerializer.Serialize<TodoItem>(item, _serializerOptions);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = null;
if (isNewItem)
response = await _client.PostAsync(uri, content);
else
response = await _client.PutAsync(uri, content);
if (response.IsSuccessStatusCode)
Debug.WriteLine(@"\tTodoItem successfully saved.");
}
catch (Exception ex)
{
Debug.WriteLine(@"\tERROR {0}", ex.Message);
}
}
Bu örnekte, TodoItem örneği, web hizmetine göndermek üzere bir JSON yüküne serileştirildi. Bu yük, istek PostAsync yöntemiyle yapılmadan önce web hizmetine gönderilecek HTTP içeriğinin gövdesine daha sonra eklenir.
REST hizmeti, HTTP isteğinin başarılı veya başarısız olup olmadığını belirtmek için yanıtında HttpResponseMessage.IsSuccessStatusCode özelliğinden alınabilen bir HTTP durum kodu gönderir. Bu işlemin tipik yanıtları şunlardır:
- 201 (OLUŞTURULDU) – İstek, yanıt gönderilmeden önce yeni bir kaynak oluşturulmasıyla sonuçlandı.
- 400 (BAD REQUEST) – istek sunucu tarafından anlaşılmıyor.
- 409 (ÇAKıŞMA) – sunucudaki bir çakışma nedeniyle istek gerçekleştirilemedi.
Verileri güncelleştirme
HttpClient.PutAsync yöntemi, URI tarafından belirtilen web hizmetine put isteği göndermek ve ardından yanıtı web hizmetinden almak için kullanılır:
public async Task SaveTodoItemAsync(TodoItem item, bool isNewItem = false)
{
...
response = await _client.PutAsync(uri, content);
...
}
yönteminin PutAsync işlemi, web hizmetinde veri oluşturmak için kullanılan yöntemle aynıdır PostAsync . Ancak, web hizmetinden gönderilen olası yanıtlar farklılık gösterir.
REST hizmeti, HTTP isteğinin başarılı veya başarısız olup olmadığını belirtmek için yanıtında HttpResponseMessage.IsSuccessStatusCode özelliğinden alınabilen bir HTTP durum kodu gönderir. Bu işlemin tipik yanıtları şunlardır:
- 204 (İçERİk YOK) – İstek başarıyla işlendi ve yanıt kasıtlı olarak boş.
- 400 (BAD REQUEST) – istek sunucu tarafından anlaşılmıyor.
- 404 (BULUNAMADı) – İstenen kaynak sunucuda yok.
Verileri sil
HttpClient.DeleteAsync yöntemi, URI tarafından belirtilen web hizmetine bir DELETE isteği göndermek ve ardından yanıtı web hizmetinden almak için kullanılır:
public async Task DeleteTodoItemAsync(string id)
{
Uri uri = new Uri(string.Format(Constants.RestUrl, id));
try
{
HttpResponseMessage response = await _client.DeleteAsync(uri);
if (response.IsSuccessStatusCode)
Debug.WriteLine(@"\tTodoItem successfully deleted.");
}
catch (Exception ex)
{
Debug.WriteLine(@"\tERROR {0}", ex.Message);
}
}
REST hizmeti, HTTP isteğinin başarılı veya başarısız olup olmadığını belirtmek için yanıtında HttpResponseMessage.IsSuccessStatusCode özelliğinden alınabilen bir HTTP durum kodu gönderir. Bu işlemin tipik yanıtları şunlardır:
- 204 (İçERİk YOK) – İstek başarıyla işlendi ve yanıt kasıtlı olarak boş.
- 400 (BAD REQUEST) – istek sunucu tarafından anlaşılmıyor.
- 404 (BULUNAMADı) – İstenen kaynak sunucuda yok.
Yerel geliştirme
ASP.NET Core Web API gibi bir çerçeveyle yerel olarak bir REST web hizmeti geliştiriyorsanız, web hizmetinizde ve .NET MAUI uygulamanızda aynı anda hata ayıklayabilirsiniz. Bu senaryoda, Web hizmetinizi Android öykünücülerinden ve iOS simülatörlerinden HTTP üzerinden kullanmak için .NET MAUI uygulamanızda düz metin HTTP trafiğini etkinleştirmeniz gerekir. Daha fazla bilgi için bkz: Android emülatörlerinden ve iOS simülatörlerinden yerel web hizmetlerine bağlanma.
Örneğe göz atın