Série WebAPI Parte1 – Vamos falar de OWIN e Projeto KATANA

logo_webapiOwin

Pretendo publicar uma série de artigos sobre WEBAPI, e neste vou tentar explicar para quem ainda não conhece o que é  OWIN e o Projeto KATANA.

Você já deve ter visto várias maneiras de implementar uma WEBAPI, uma forma que chamou minha atenção e uma dúvida que tinha era por que algumas implementações possuía um arquivo chamado Startup.cs e outras não.

Estudando e lendo sobre isso descobri que quando temos essa classe Startup.cs estamos falando de uma OWIN Application.

Mas o que é uma OWIN Application????

OWIN é a abreviação de Open Web Interface for .NET trata-se de uma especificação aberta para que servidores e Web Applications possam interagir entre si. Não é uma aplicação ou software é uma especificação.

Implementar uma OWIN Application basicamente te liberta de necessariamente utilizar o IIS como servidor WEB. Basicamente o OWIN é uma camada de abstração entre o server e a aplicação.

Quando desenvolvemos uma WEBAPI clássica temos o arquivo Global.asax e o WebApiConfig.cs e obrigatoriamente precisamos hospedar no IIS para rodar os serviços. Com a preocupação que temos hoje em manter as aplicações mais interoperáveis implementar a WEBAPI como uma OWIN Application é uma ótima medida.

Quando você for desenvolver em .NET CORE vai perceber que todas as Web Applications já nascem como OWIN Applications, mas isso fica para um próximo artigo, ah se quiser ver como criar serviço em .NET CORE vá no meu artigo anterior.

Quando ouvir falar de OWIN provavelmente você vai ouvir falar de Projeto KATANA.

Como falei acima o OWIN é uma especificação e o KATANA é a proposta da Microsoft para a implementação do modelo OWIN, trata-se de um conjunto de ferramentas disponibilizados pela Microsoft, também é conhecido como PROJETO KATANA.

Como o KATANA existem várias outras implementações da especificação OWIN.

Vamos estudar isso criando uma WEBAPI clássica e transformado em uma OWIN Application ok?

O primeiro passo é criar a api clássica, para isso crie no Visual Studio (estou usando aqui a versão 2013) uma nova solution, aqui no meu exemplo eu chamei de EstudoWebApi, pois minha intenção é ir implementando mais exemplos sobre WEBAPI.

webapiowin1

Crie dentro da solution um projeto WebApi simples, com o nome de WebApiClassica:

webapiowin2

Vá na pasta Controllers e crie um novo controller com o nome de HomeController, bem simples dentro dele insira o método:


public string Get(){

return "Hello World WEB API Clássica";

}

Sua solution deverá estar parecida com a imagem abaixo:

webapiowin3Neste momento basta rodar sua aplicação com F5 e completar a URL no browser que deverá estar funcionando como na imagem abaixo:

webapiowin4

Pronto, muito simples e fácil a criação de uma API básica no modo clássico, observe na solution porém que temos dois arquivos de configuração o Global.asax e o WebApiConfig.cs e necessitamos obrigatoriamente do IIS para hospedar a mesma.

Agora vamos transformar essa implementação em uma OWIN Application, para fazer isso vou copiar essa implementação em outro projeto, para manter a implementação clássica sem alterações no caso de querer efetuar uma comparação no futuro.

Vamos criar agora outra WEBAPI no mesmo esquema acima mas chamá-la de WebApiOwin.

A solution deverá ficar parecida com a imagem abaixo:

webapiowin5Rodando o novo serviço temos a saída:

webapiowin11Agora vamos alterar a API para ser uma OWIN Application, o primeiro passo é inserir as referências necessárias via Nuget, para isso abra o Package Manager Console (não esqueça de definir o default Project como WebApiOwin):

webapiowin7

Entre com as duas referências necessárias:

  • Install-Package Microsoft.AspNet.WebApi.Owin
  • Install-Package Microsoft.Owin.Host.SystemWeb

Depois de instalado os pacotes seu arquivo packages.config deverá estar parecido com a imagem abaixo:

webapiowin8

O primeiro pacote instala o protocolo OWIN e o segundo é o projeto KATANA com a implementação da Microsoft para o OWIN necessário para que o IIS entenda o serviço.

Agora vamos criar a classe Startup.cs, para isso já foi disponibilizado um template no Visual Studio:

webapiowin9

Com a classe criada vamos colocar o código abaixo no método Configuration:

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
using System.Web.Http;

[assembly: OwinStartup(typeof(WebApiOwin.Startup))]

namespace WebApiOwin
{
 public class Startup
 {
   public void Configuration(IAppBuilder app)
   {
      //configuração WebApi
      var config = new HttpConfiguration();

     //configurando rotas
     config.MapHttpAttributeRoutes();
     config.Routes.MapHttpRoute(
          name: "DefaultApi",
          routeTemplate: "api/{controller}/{id}",
          defaults: new { id = RouteParameter.Optional }
      );
      // ativando configuração WebApi
      app.UseWebApi(config);
 }
 }
}

Depois desta configuração podemos excluir os arquivos Global.asax e WebApiConfig.cs:

webapiowin10

Rodando a aplicação deveremos ter a mesma saída:

webapiowin11

Para finalizar se abrirmos arquivo Startup.cs vamos ver um atributo logo acima do namespace:

[assembly: OwinStartup(typeof(TransformOwin.Startup))]</pre>
<pre>

Esse atributo informa que a classe deverá ser utilizada para iniciar a OWIN Application você pode deixar desta maneira ou colocar essa configuração no Web.config dentra tag <appSettings>:

&amp;lt;add key="OwinStartup" value="WebApiOwin.Startup" /&amp;gt;

Com essa configuração no Web.config podemos deletar esse atributo da classe Startup.cs, fica ao seu critério essa mudança. Bem o código acima encontra-se no meu github sinta-se à vontade para baixar e estudar o código fonte.

Vou tentar hospedar esse teste em algum outro server web para entender e ver se funciona legal, ae depois eu escrevo sobre exemplificando.

No próximo artigo desta série vou demonstrar como implementar autorização e autenticação com uso de tokens, uma forma muito utilizada hoje em dia.

Aguardem! um abraço, se ajudou comenta ae se não ajudou comenta também!!!

8 comments

  1. Olá Marcelo, dessa forma também devo adicionar chamadas como “FilterConfig.RegisterGlobalFilters()” e ” AreaRegistration.RegisterAllAreas()” na classe Startup?

    1. Olá Anderson, no Owin a inclusão dessas chamadas será um pouco diferente.. veja esse link. Esse é um cenário que nunca tive que implementar..vou fazer um exemplo principalmente dos filters e posto aqui e te mando. As “areas” eu acho que como um projeto de WEBAPI não teria muito sentido se preocupar..

Deixe um comentário para Wilson Cancelar resposta

O seu endereço de e-mail não será publicado.