Olá pessoal!
O objetivo Consume Web API web services, o último sobre Web API, cobre como consumir serviços Web API usando HttpClient e mandar e receber requests em formatos diferentes.
Consumindo Serviços Web API
A classe HttpClient é usada para fazer requisições e trabalhar com o retorno. Para os exemplos dessa seção, vamos utilizar o seguinte método como setup:
Vamos passar pelos 4 métodos HTTP mais comuns: Get, Post, Put e Delete, além de aprender como lidar com exceções.
HttpGet
Para fazer um Get, o método GetAsync do HttpClient é usado. Não há um equivalente síncrono, somente o método Async.
Após o retorno da operação, a propriedade IsSuccessStatusCode é populada. O código ficaria assim:
O método ReadAsAsync é um método de extensão, implementado no assembly System.Net.Http.Formatting.
HttpPost
Para executar um Post, você pode usar os métodos PostAsync e PostAsJsonAsync, que simplifica as coisas caso o Content-Type seja JSON. A implementação é bem simples:
HttpPut
Um Put pode ser feito praticamente da mesma forma que um Post. Há os métodos PutAsync e PutAsJsonAsync:
HtpDelete
O método DeleteAsync faz um Delete. O método apenas recebe uma string com a URL, já com o identificador do item a ser deletado:
Exceções
Exceções podem ocorrer ao chamar um serviço Web API.
Nesses casos, porém, na chamada ao método que fez a operação (GetAsync, PostAsync, etc.), a exceção não é automaticamente lançada. Você deve explicitamente chamar o método EnsureSuccessStatusCode para que isso aconteça.
Veja os seguintes trechos de código. O primeiro não lança a exceção, enquanto o segundo faz:
Mandando E Recebendo Requests Em Formatos Diferentes
Há algumas opções em relação aos formatos aceitos pelo framework Web API. Isso inclui application/xml, text/html, image/png, application/json, etc.
Esses valores são retornados no header Content-Type dos responses, indicando o tipo do retorno. Eles também podem ser usados no header Accept para que o client especifique o tipo do retorno que ele quer receber. Nesses headers, múltiplos valores são aceitos sendo separados por vírgula.
É possível também implementar formatos customizados. Você pode fazer isso herdando das classes MediaTypeFormatter ou BufferedMediaTypeFormatter. A principal diferença entre elas é MediaTypeFormatter suporta a leitura assíncrona, enquanto BufferedMediaTypeFormatter suporta somente leituras síncronas.
Primeiro, você deve herdar da classe desejada e adicionar o media type a ser suportado na coleção SupportedMediaTypes:
Você precisa também adicionar seu formatter customizado no HttpConfiguration: config.Formatters.Add(new CustomCsvFormatter());
.
Depois, você implementa sua lógica na classe criada. As propriedades CanWriteType e CanReadType devem ser sobrescritas, indicando se o tipo pode ser serializado e desserializado. O método WriteToStream também deve ser implementado e se o formatter suportar desserialização (CanReadType true), o método ReadFromStream precisa ser implementado.
Detalhes sobre a implementação não cairão no exame, mas é bom seguir o exemplo da documentação para ter uma ideia melhor de como implementar um formatter customizado: http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters.
E encerramos o capítulo sobre Web API 😀
O próximo post será sobre o objetivo 5.1, Design a deployment strategy. Esse é o primeiro objetivo do último tópico da certificação.
Obrigado e até mais!