Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Интеграция веб-службы в приложение является общим сценарием. В этой статье показано, как использовать веб-службу RESTful из Xamarin.Forms приложения.
Передача репрезентативного состояния (REST) — это архитектурный стиль для создания веб-служб. Запросы REST выполняются по протоколу HTTP с использованием тех же HTTP-команд, которые используются веб-браузерами для получения веб-страниц и отправки данных на серверы. Ниже приведен перечень команд.
- GET — эта операция используется для получения данных из веб-службы.
- POST — эта операция используется для создания нового элемента данных в веб-службе.
- PUT — эта операция используется для обновления элемента данных в веб-службе.
- PATCH — эта операция используется для обновления элемента данных веб-службы путем описания набора инструкций по изменению элемента. Эта команда не используется в примере приложения.
- DELETE — эта операция используется для удаления элемента данных в веб-службе.
API-интерфейсы веб-службы, которые соответствуют REST, называются RESTful API и определяются с помощью следующих элементов:
- Базовый универсальный код ресурса (URI).
- Методы HTTP, такие как GET, POST, WHERE, PATCH или DELETE.
- Тип носителя для данных, например нотация объектов JavaScript (JSON).
Веб-службы RESTful обычно используют сообщения JSON для возврата данных клиенту. JSON — это текстовый формат обмена данными, который создает компактные полезные данные, что приводит к снижению требований к пропускной способности при отправке данных. Пример приложения использует библиотеку открытый код NewtonSoft JSON.NET для сериализации и десериализации сообщений.
Простота REST помогла сделать его основным методом для доступа к веб-службам в мобильных приложениях.
При запуске примера приложения он подключается к локально размещенной службе REST, как показано на следующем снимке экрана:

Примечание.
В iOS 9 и более поздней версии безопасность транспорта приложений (ATS) обеспечивает безопасные подключения между интернет-ресурсами (например, сервером приложения) и приложением, тем самым предотвращая случайное раскрытие конфиденциальной информации. Так как ATS включен по умолчанию в приложениях, созданных для iOS 9, все подключения будут соответствовать требованиям безопасности ATS. Если подключения не соответствуют этим требованиям, они завершаются сбоем с исключением.
ATS можно отказаться от использования протокола HTTPS и безопасного взаимодействия для интернет-ресурсов. Это можно сделать, обновив файл Info.plist приложения. Дополнительные сведения см. в разделе "Безопасность транспорта приложений".
Использование веб-службы
Служба REST записывается с помощью ASP.NET Core и предоставляет следующие операции:
| Операция | Метод HTTP | Относительный универсальный код ресурса (URI) | Параметры |
|---|---|---|---|
| Получение списка элементов задач | GET | /api/todoitems/ | |
| Создание нового элемента для выполнения | POST | /api/todoitems/ | Формат JSON TodoItem |
| Обновление элемента задачи | PUT | /api/todoitems/ | Формат JSON TodoItem |
| Удаление элемента задачи | DELETE | /api/todoitems/{id} |
Большинство URI включают TodoItem идентификатор в путь. Например, чтобы удалить TodoItem идентификатор 6bb8a868-dba1-4f1a-93b7-24ebce87e243, клиент отправляет запрос http://hostname/api/todoitems/6bb8a868-dba1-4f1a-93b7-24ebce87e243DELETE. Дополнительные сведения о модели данных, используемой в примере приложения, см. в разделе "Моделирование данных".
Когда платформа веб-API получает запрос, он направляет запрос на действие. Эти действия являются просто общедоступными методами TodoItemsController в классе. Платформа использует ПО промежуточного слоя маршрутизации, чтобы сопоставить URL-адреса входящих запросов и сопоставить их с действиями. REST API должны использовать маршрутизацию атрибутов модели функциональных возможностей приложения в качестве набора ресурсов, операции которых представлены HTTP-командами. При маршрутизации с помощью атрибутов используется набор атрибутов для сопоставления действий непосредственно с шаблонами маршрутов. Дополнительные сведения о маршрутизации атрибутов см. в разделе "Маршрутизация атрибутов" для REST API. Дополнительные сведения о создании службы REST с помощью ASP.NET Core см. в статье "Создание серверных служб для собственных мобильных приложений".
Класс HttpClient используется для отправки и получения запросов по протоколу HTTP. Он предоставляет функциональные возможности для отправки HTTP-запросов и получения HTTP-ответов из определяемого ресурса URI. Каждый запрос отправляется как асинхронная операция. Дополнительные сведения об асинхронных операциях см. в обзоре поддержки Async.
Класс HttpResponseMessage представляет сообщение HTTP-ответа, полученное от веб-службы после выполнения HTTP-запроса. Он содержит сведения об ответе, включая код состояния, заголовков и любой текст. HttpContent Класс представляет тело HTTP и заголовки содержимого, таких как Content-Type и Content-Encoding. Содержимое можно считывать с помощью любого из ReadAs методов, таких как ReadAsStringAsync и ReadAsByteArrayAsyncв зависимости от формата данных.
Создание объекта HTTPClient
HttpClient Экземпляр объявляется на уровне класса, чтобы объект работал до тех пор, пока приложение должно выполнять HTTP-запросы, как показано в следующем примере кода:
public class RestService : IRestService
{
HttpClient client;
...
public RestService ()
{
client = new HttpClient ();
...
}
...
}
Извлечение данных
Метод HttpClient.GetAsync используется для отправки запроса GET в веб-службу, указанную URI, а затем получает ответ от веб-службы, как показано в следующем примере кода:
public async Task<List<TodoItem>> RefreshDataAsync ()
{
...
Uri uri = new Uri (string.Format (Constants.TodoItemsUrl, string.Empty));
...
HttpResponseMessage response = await client.GetAsync (uri);
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync ();
Items = JsonSerializer.Deserialize<List<TodoItem>>(content, serializerOptions);
}
...
}
Служба REST отправляет код состояния HTTP в свойстве HttpResponseMessage.IsSuccessStatusCode , чтобы указать, выполнен ли HTTP-запрос успешно или завершился сбоем. Для этой операции служба REST отправляет код состояния HTTP 200 (ОК) в ответе, который указывает, что запрос выполнен успешно и что запрошенная информация находится в ответе.
Если операция HTTP прошла успешно, содержимое ответа считывается для отображения. Свойство HttpResponseMessage.Content представляет содержимое HTTP-ответа, а HttpContent.ReadAsStringAsync метод асинхронно записывает содержимое HTTP в строку. Затем это содержимое десериализируется из JSON в ListTodoItem экземпляры.
Предупреждение
ReadAsStringAsync Использование метода для получения большого ответа может оказать негативное влияние на производительность. В таких случаях ответ должен быть непосредственно десериализирован, чтобы избежать необходимости полностью буферизировать его.
Создание данных
Метод HttpClient.PostAsync используется для отправки запроса POST в веб-службу, указанную URI, а затем для получения ответа от веб-службы, как показано в следующем примере кода:
public async Task SaveTodoItemAsync (TodoItem item, bool isNewItem = false)
{
Uri uri = new Uri (string.Format (Constants.TodoItemsUrl, string.Empty));
...
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);
}
...
if (response.IsSuccessStatusCode)
{
Debug.WriteLine (@"\tTodoItem successfully saved.");
}
...
}
Экземпляр TodoItem сериализуется в полезные данные JSON для отправки в веб-службу. Затем эта полезные данные внедряется в текст http-содержимого, которое будет отправлено веб-службе перед выполнением запроса с PostAsync помощью метода.
Служба REST отправляет код состояния HTTP в свойстве HttpResponseMessage.IsSuccessStatusCode , чтобы указать, выполнен ли HTTP-запрос успешно или завершился сбоем. Распространенные ответы для этой операции:
- 201 (CREATED) — запрос привел к созданию нового ресурса до отправки ответа.
- 400 (BAD REQUEST) — запрос не понимается сервером.
- 409 (CONFLICT) — запрос не удалось выполнить из-за конфликта на сервере.
Обновление данных
Метод HttpClient.PutAsync используется для отправки запроса PUT в веб-службу, указанную URI, а затем получает ответ от веб-службы, как показано в следующем примере кода:
public async Task SaveTodoItemAsync (TodoItem item, bool isNewItem = false)
{
...
response = await client.PutAsync (uri, content);
...
}
Операция PutAsync метода идентична PostAsync методу, который используется для создания данных в веб-службе. Однако возможные ответы, отправленные из веб-службы, отличаются.
Служба REST отправляет код состояния HTTP в свойстве HttpResponseMessage.IsSuccessStatusCode , чтобы указать, выполнен ли HTTP-запрос успешно или завершился сбоем. Распространенные ответы для этой операции:
- 204 (NO CONTENT) — запрос успешно обработан и ответ намеренно пуст.
- 400 (BAD REQUEST) — запрос не понимается сервером.
- 404 (NOT FOUND) — запрошенный ресурс не существует на сервере.
Удаление данных
Метод HttpClient.DeleteAsync используется для отправки запроса DELETE в веб-службу, указанную URI, а затем получает ответ от веб-службы, как показано в следующем примере кода:
public async Task DeleteTodoItemAsync (string id)
{
Uri uri = new Uri (string.Format (Constants.TodoItemsUrl, id));
...
HttpResponseMessage response = await client.DeleteAsync (uri);
if (response.IsSuccessStatusCode)
{
Debug.WriteLine (@"\tTodoItem successfully deleted.");
}
...
}
Служба REST отправляет код состояния HTTP в свойстве HttpResponseMessage.IsSuccessStatusCode , чтобы указать, выполнен ли HTTP-запрос успешно или завершился сбоем. Распространенные ответы для этой операции:
- 204 (NO CONTENT) — запрос успешно обработан и ответ намеренно пуст.
- 400 (BAD REQUEST) — запрос не понимается сервером.
- 404 (NOT FOUND) — запрошенный ресурс не существует на сервере.
Сервер локальной
Если вы разрабатываете веб-службу REST локально с помощью платформы, например ASP.NET Core Web API, вы можете одновременно отлаживать веб-службу и мобильное приложение. В этом сценарии необходимо включить http-трафик с четким текстом для симулятора iOS и эмулятора Android. Сведения о настройке проекта для предоставления связи см. в Подключение локальных веб-службах.