Motivação
No desenvolvimento de serviços RESTful, normalmente as operações de um CRUD (Create, Read, Update e Delete) são iniciadas através de métodos que utilizam, respectivamente, os verbos POST, GET, PUT e DELETE do protocolo HTTP. Nesse cenário, independentemente da linguagem e framework que se esteja adotando, é fundamental saber como empregar esses verbos e implementar tais operações, de forma que elas possam ser compreendidas e utilizadas com facilidade pelas aplicações clientes.
Nesse artigo veremos como criar web services RESTful para disponibilizar as operações de um CRUD explorando os recursos do framework NancyFx e do Entity Framework Code First.
Passo 1: Criar o projeto
Nesse exemplo simularemos um cadastro de filmes, que nos permitirá explorar todas as operações de um CRUD. Então, começaremos criando um novo projeto no Visual Studio, a partir do menu File > New > Project e escolhendo o template Nancy Application with ASP .NET hosting.
O próximo passo será a instalação da biblioteca do Entity Framework, que pode ser feita ao acessar o menu Tools > NuGet Package Manager > Package Manager Console e na janela que será aberta, executar o comando:
Install-Package EntityFramework
Passo 2: Criar o model
Logo após, devemos criar uma nova pasta, na solution, chamada Infra, e dentro dela adicionar dois arquivos: Filmes.cs, contendo a entidade principal do nosso sistema e cujo código pode ser visto na Listagem 1; e Contexto.cs, com a classe de contexto que fará a comunicação com a base de dados, como podemos ver na Listagem 2.
Ambas as classes são bastantes simples, e possuem apenas códigos comumente utilizados em aplicações nas quais o Entity Framework é adotado para o acesso ao banco de dados.
01 public class Filme
02 {
03 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
04 public int Id { get; set; }
05 [StringLength(100)]
06 public string Nome { get; set; }
07 }
01 public class Contexto : DbContext
02 {
03 public Contexto() : base("name=Locadora")
04 {
05 }
06
07 public virtual DbSet<Filme> Filmes { get; set; }
08 }
Passo 3: Adicionar dados
Com o projeto criado e configurado, implementaremos agora os métodos correspondentes ao CRUD no nosso serviço. O primeiro deles será o POST, responsável por adicionar novos registros à base de dados. Para isso, devemos configurar o nosso IndexModule, que é gerado automaticamente pelo Visual Studio ao criarmos o projeto NancyFx. Veja a Listagem 3.
01 public class IndexModule : NancyModule
02 {
03 var _contexto = new Contexto();
04 _contexto.Database.CreateIfNotExists();
05 public IndexModule() : base("/filmes")
06 {
07 Post["/"] = _ =>
08 {
09 var filme = this.Bind<Filme>();
10 _contexto.Filmes.Add(filme);
11 _contexto.SaveChanges();
12 return HttpStatusCode.OK;
13 };
14 }
15 }
Linha 03: Instanciamos o arquivo de contexto do Entity Framework;
Linha 04: Criamos a base de dados, caso ela não exista;
Linha 05: Configuramos a rota desse módulo, nesse caso, para /filmes;
Linha 07: Configuramos o método que tratará as requisições via POST;
Linha 09: Recebemos os valores do POST e os convertemos para um objeto do tipo Filme com o método Bind();
Linhas 10 e 11: Inserimos o novo registro na base de dados e salvamos as alterações;
Linha 12: Retornamos o status OK (200), informando que o método foi bem-sucedido.
Agora, caso desejemos testar a aplicação e verificar como os dados são recebidos pelo módulo do NancyFx, devemos adicionar um breakpoint na linha 8 da Listagem 3 e executar o projeto. Para testar nosso serviço, utilizaremos o Postman - uma extensão do Google Chrome para enviar requisições HTTP - que deve ser configurado de acordo com a Figura 1.
Figura 1. Configuração do Postman
Após inserir a URL do serviço e um valor para a propriedade Nome na aba Body, basta clicar em Send. Nesse momento, podemos voltar ao Visual Studio e analisar as variáveis no código quando a execução parar no breakpoint, como mostra a Figura 2.
Figura 2. Valores recebidos no POST
Passo 4: Listar informações
O próximo método que iremos implementar será o GET, a partir do qual retornaremos todos os registros já cadastrados ou buscaremos um específico, a partir do seu identificador. A Listagem 4 demonstra o código que deve ser inserido no IndexModule.
01 Get["/"] = x =>
02 {
03 var filmes = _contexto.Filmes.ToList();
05 return Response.AsJson(filmes);
07 };
08
09 Get["/{id:int}"] = parameters =>
10 {
11 int id = parameters.id;
13 var filme = _contexto.Filmes.FirstOrDefault(x => x.Id == id);
15 return Response.AsJson(filme);
16 };
Linha 01: Configuramos o primeiro método Get, que não recebe parâmetros;
Linha 03: Obtemos todos os objetos na coleção Filmes do contexto do Entity Framework;
Linha 05: Retornamos todos os registros em formato JSON;
Linha 09: Configuramos o segundo método Get, agora recebendo um parâmetro chamado id do tipo inteiro;
Linha 11: Recebemos o valor do parâmetro e o passamos para uma variável local;
Linha 13: Buscamos no banco de dados o registro que corresponda ao id especificado;
Linha 15: Retornamos o registro selecionado no formato JSON.
Nesse momento, para que possamos testar os métodos de listagem de dados, basta enviarmos requisições GET pelo Postman para as rotas /filmes e /filmes/{id buscado}.
Passo 5: Alterar registros
Dando continuidade ao CRUD, vamos criar o método que possibilitará a atualização dos dados. Para isso, teremos um método que tratará as requisições realizadas com o verbo HTTP PUT. A Listagem 5 demonstra essa implementação.
01 Put["/{id:int}"] = parameters =>
02 {
03 Filmes filme = this.Bind<Filmes>();
04 filme.Id = parameters.id;
05
06 _contexto.Entry(filme).State = EntityState.Modified;
07 _contexto.SaveChanges();
08
09 return HttpStatusCode.OK;
10 };
Linha 01: Configuramos o método Put para receber um parâmetro do tipo inteiro;
Linhas 06 e 07: Após localizar o registro desejado, alteramos seu status para “modificado” e salvamos as alterações.
Para testar esse método, devemos preencher a propriedade Nome no Postman e, além disso, informar o id na URL, como mostra a Figura 3.
Figura 3. Enviando requisição PUT
Após efetuar essa alteração, podemos enviar uma requisição GET e assim confirmar se os dados foram modificados.
Passo 6: Excluir registros
Para concluir as operações de CRUD, implementaremos agora o método de exclusão, conforme demonstra a Listagem 6.
01 Delete["/{id:int}"] = parameters =>
02 {
03 Filmes filme = this.Bind<Filmes>();
04 filme.Id = parameters.id;
05 _contexto.Entry(filme).State = EntityState.Deleted;
06 _contexto.SaveChanges();
07
08 return HttpStatusCode.OK;
09 };
Linha 1: Declaramos o método Delete, que receberá um id como parâmetro;
Linhas 05 e 06: Modificamos o estado do objeto selecionado para “excluído” e salvamos as alterações.
No Postman, para testar esse novo método, basta alterar o verbo para DELETE e informar o id na URL, como em: /filmes/3, sendo 3 o id do filme a ser excluído. Em seguida, podemos enviar novamente uma requisição GET e verificar os registros retornados.
Confira outros conteúdos:
Teste unitário com NUnit
Como migrar projetos do ASP.NET MVC...
Crie relatórios com o Stimulsoft...
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.