Beto Barros – Antes de tudo – Quem são vocês?



Beto Barros – Antes de tudo – Quem são vocês?

0 0


RESTful-Presentation-SENAI

Presentation used in my class in the course of RESTful

On Github BetoBarros07 / RESTful-Presentation-SENAI

Beto Barros

Backend Developer

Antes de tudo

Quem são vocês?

O que vocês sabem?

REST?

REpresentational State Transfer (REST), em português Transferência de Estado Representacional, é uma abstração da arquitetura da World Wide Web (WWW), um estilo arquitetural que consiste de um conjunto coordenado E BLA, BLA, BLA....

WTF?!

Não se assuste...

Imagina o tio Zuckerberg fazendo o facebook há um século atrás!

O nosso querido amigo Mark escreveu toda a regra de negócio, e fez todos os acessos à base de dados na aplicação web.

Ele com certeza se arrependeu de não saber REST!!! HAHAHA

YEAP!

RESUMINDO! Todos viveram felizes para sempre!

HTTP?

O Hypertext Transfer Protocol (HTTP), em português Protocolo de Transferência de Hipertexto, é um protocolo de comunicação (na camada de aplicação segundo o Modelo OSI) utilizado para sistemas de informação de hipermídia, distribuídos e colaborativos.[1] Ele é a base para a comunicação de dados da World Wide Web E BLA, BLA, BLA....

Professor, o que eu preciso entender?

Verbos HTTP

Request e Response

Status code

Hora de aventura! :)

Let's go!

Para adiantar, eu coloquei o projeto base no Desktop de todos vocês, aproveitem!

Nesse projeto vocês já tem o módulo de Banco de Dados todo configurado e pronto.

NÃO ALTEREM NADA...

SÉRIO!!

Solution Explorer

WebApiConfig.cs

Global.asax.cs

Finalmente, vamos começar!

UserController.cs

Com a UserController criada, vamos iniciar.

Rota padrão

Para usar o módulo de banco de dados, basta importar a biblioteca RESTful.SENAI.BO

Crie a propriedade na controller para acessar o Banco

POST

A função do POST, no conjunto de métodos HTTP, é enviar uma representação de uma nova entidade de dados ao servidor de forma que ele seja armazenado como um novo subordinado do recurso identificado pelo URI E BLA, BLA, BLA...

Para usar é bem simples... Em cima de cada método coloque o seguinte atributo.

Vamos criar um usuário?

Rota

Primeiro iremos definir a rota para cadastrar um usuário. Coloque o atributo abaixo acima do método de cadastro.

Professor, e o método de cadastro?

Não se preocupem com isso!

Onde está o problema?

Agora nós precisamos fazer uma Model para cadastrar

E o que vamos inserir?

E como essa Model vai se relacionar com a Controller?

Agora na controller podemos chamar o método de cadastro do Field _userBo

Faltou só uma coisa, essa Model não é do tipo User

Que tal criarmos um método para converter essa model pra gente?

E a nossa Controller, como ela fica agora?

201 - CREATED

É assim que vamos testar!

Abram o Postman, e façam como o Sensei!

Dúvida!

Vocês acham útil eu receber como resposta o "deletedAt" e o "password" do usuário cadastrado?

Vamos criar uma model Read?

Bora pra controller!

Muito melhor não?

Dá pra melhorar mais! HAHAHA

Façam isso no seu código

Na Model Read.cs

Dúvida!

O "name", "username" e "password" podem ser vazios?

Pra adiantar pra vocês... Pode sim!

Por enquanto...

Adicionem os DataAnnotations na Create.cs

Tá, mas isso já valida pra mim?

Não! HAHAHA

Relaxa! Deus no comando, ok?!

Adicione essa validação na sua controller e tá tudo certo!

403 - BAD REQUEST

GET

Solicita algum recurso como um arquivo ou um script CGI (qualquer dado que estiver identificado pelo URI) por meio do protocolo HTTP. Por exemplo, segue abaixo uma comunicação entre um cliente e um servidor HTTP E BLA, BLA, BLA...

Lembra de como definimos o POST, imaginem como é o do GET!!

Vamos listar todos os usuários?

Rota

Vocês lembram de como criamos a rota pro Create? Segue a vida!

O método é só fazer assim que a mágica acontece sozinha!

Valeu, mas e pra funfar?

Vamos primeiro rever a model Read.cs

O segundo passo e mexer na Controller

200 - OK

Vamos testar?

Mas dessa vez, abram no browser e vejam o resultado, mas não me falem!

Deu erro?

Coloquem isso no seu WebApiConfig.cs

JSON vs XML

Vamos buscar um usuário especifico?

Continua sendo GET tá bom?

A diferença está na rota!

Adicionem isso dentro do método FindById

Testem ai!

Deu bom?

Dúvida!

E se eu colocar um id que não existe?

Adicionem essa validação dentro do findById

404 - NOT FOUND

PUT

Edita as informações de um determinado recurso.

Advinhem como definimos um PUT!

Vamos editar as informações do Bona?

Rota

A rota é idêntica à do FindById

Vamos adiantar a Model?

E pra editar um registro faça!

DELETE

Exclui o recurso.

Sério, não precisava nem da imagem!

Vamos excluir o Bona?

Rota

A rota é idêntica à do FindById e do Update

E pra deletar um registro faça!

204 - NO CONTENT

Dúvida!

E se eu não conseguir deletar?

Adicione a seguinte validação!

500 - INTERNAL SERVER ERROR

Agora é a vez de vocês!

  • Façam uma Controller de carro!
  • Mudem sua rota padrão para "sample".
  • Importe a biblioteca RESTful.SENAI.BO.
  • Cadastre um carro.
  • Liste e filtre os carros por nome, ano e fabricante.
  • Busque um carro pelo seu Id.
  • Edite as infos de um carro.
  • Delete um carro.

Segurança em RESTful

Login Controller

Vamos importar o user BO?

Precisamos de uma model, certo?

Colocaremos só o que é pertinente na model

Vamos fazer o nosso recurso de Login

401 - UNAUTHORIZED

Dúvida!

Ele autenticou, beleza, mas ele tá validando se eu posso acessar os recursos da aplicação?

Token

Headers

Response Headers

Request Headers

Query Strings

Form Data

Vamos gerar um token e enviar pelo REST?

O nosso método de login vai ficar assim agora!

Ainda não usamos validamos os outros métodos

Middlewares ou Filters

Eis o nosso Filter

Olha ele ai!

Podemos usar Filters também para...

Erros!

Validação!

Eu também posso poupar vocês de ficar chamando ele toda hora!

E para deslogar?

Simples

0