ФОН
В настоящее время я нахожусь в стороннем проекте, где я создаю мобильное приложение на основе Xamarin для удобного поиска фильмов и ТВ-шоу и навигации по предпочтениям пользователя (например, по жанру фильма и т. д.).
Для этого мобильное приложение выступает в качестве клиента для службы веб-API https://www.themoviedb.org/documentation/api онлайн-базы данных фильмов.
ПРОБЛЕМА
Я ищу простой и хорошо поддерживаемый пакет, чтобы обернуть пути API Uri и параметры запроса в запрос веб-API. Я немного посмотрел на RestSharp.
Мне очень нравится синтаксис с путем запроса на основе шаблона:
var request = new RestRequest("resource/{id}");
request.AddParameter("name", "value");
request.AddUrlSegment("id", "123");
но я не уверен в будущем пакетов. Также, если есть альтернатива от MS, я бы взял это.
Так что также посмотрел Web-API с учетом альтернатив MS, но я не уверен, что там рекомендуется. Я могу только найти документы и примеры для серверной части (ASP.NET CORE MVC).
Мне нужно указать на хорошо работающий пакет .NET Standard 2.0 от Microsoft или от третьего лица для отправки запроса Web API от моего клиента Xamarin.
Где я
Я уже написал много кода на основе чистого HttPClient и AspNetcore.WebUtilituies для сборки строки запроса. Но миллионы сегментов пути API выходят из-под контроля. Мне действительно нужно что-то для управления шаблонами путей API, как RestSharp делает
Пример кода:
здесь я объявляю все сегменты пути, которые я собираю вручную ==> некрасиво AF
public static class WebApiPathConstants
{
public const string BASE_Address = "https://api.themoviedb.org";
public const string BASE_Path = "/3";
public const string CONFIG_Path = "/configuration";
public const string GENRE_LIST_Path = "/genre/movie/list";
...
lot of lines here
....
public const string PAGE_Key = "page";
public const string INCLUDE_Adult_Key = "include_adult";
public const string API_KEY_Key = "api_key";
public const string RECOMMENDATIONS_Path = "/recommendations";
public const string SIMILARS_Path = "/similar";
}
Здесь я собираю запрос и запускаю задачу для получения сведений о фильме на основе запроса с сервера: Сборка пути URL-адреса является моей главной проблемой. Он выглядит слишком подверженным ошибкам.
public async Task<FetchMovieDetailsResult> FetchMovieDetails(int id, string language = null, int retryCount = 0, int delayMilliseconds = 1000)
{
string baseUrl = BASE_Address + BASE_Path + MOVIE_DETAILS_Path + "/" + id;
var query = new Dictionary<string, string>();
query.Add(API_KEY_Key, apiKeyValue);
if (!string.IsNullOrEmpty(language))
query.Add(LANGUAGE_Key, language);
string requestUri = QueryHelpers.AddQueryString(baseUrl, query);
FetchMovieDetailsResult result = await GetResponse<FetchMovieDetailsResult>(retryCount, delayMilliseconds, requestUri);
return result;
}
Результатом является класс POCO с HttpStatusCode и (в случае успеха) объект Json. Клиент обращается к объекту Json, только если StatusCode == 2xx.