Certificação Microsoft 70-487: Objetivo 4.5 – Consume Web API web services

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!