Как управлять конечными точками API? - PullRequest
0 голосов
/ 01 мая 2020

Настроил HttpClient в файле startup.cs.

services.AddHttpClient("jsonPosts", client => {
  client.BaseAddress = new Uri("https://jsonplaceholder.typicode.com/");

В API вызова контроллера:

// Obtaining _clientFactory by DI on the Controller constructor
var client = _clientFactory.CreateClient("jsonPosts");

var myContent = JsonConvert.SerializeObject(myObjectToSerialize);
HttpContent stringContent = new StringContent(myContent, Encoding.UTF8, "application/json");

 HttpResponseMessage result = await client
  .PostAsync(client.BaseAddress + "posts/1", stringContent)
  .ConfigureAwait(false);

В методе PostAsyn c можно увидеть конечную точку API добавляется к базовому адресу HttpClient.

Это рекомендуемый подход к управлению различными конечными точками в приложении?

1 Ответ

0 голосов
/ 01 мая 2020

Ну, это зависит от вашего приложения. Если вам нужно всего лишь сделать несколько вещей, таких как аутентификация, публикация чего-либо, выход из приложения, то нет никаких оснований для выполнения работы и создания такой структуры. Если вы делаете несколько вызовов и особенно хотите сделать один и тот же вызов в разных точках своего кода, вы должны создать обертку API.

Обычный способ - создать один метод generi c, который принимает тип как универсальный. c аргумент, также укажите URL, метод HTTP и другие данные, которые могут вам понадобиться. Метод выполнит вызов с заданными аргументами, автоматически десериализует JSON в объект общего типа c и вернет его вам.

Таким образом, вы можете сделать что-то подобное, только имея написать один метод и определить классы для результатов. Вы можете даже использовать динамику без определения классов, но лично мне не нравится динамика.

ApiClient api = new ApiClient(baseUrl);

User user = api.get<User>("/user", new Query().add("user", "admin"));
EmailList emails = api.get<EmailList>("/user/emails");

Тогда вы все равно можете заполнить ее несколькими методами, если не хотите связываться с конечными точками, такими как

public User getUser(String username){
    User user = api.get<User>("/user", new Query().add("user", "admin"));
    return user;
}

И используйте его как

MyApiWrapper.getUser("admin");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...