ExercĆcio de criaĆ§Ć£o de Backend e API-REST, desenvolvido em Dart, para servir tanto ao App Mobile - acesso do Cliente, quanto a pĆ”gina Web - acesso do recrutador e administrador.
-
CriaĆ§Ć£o do projeto dart
-
InstalaĆ§Ć£o das dependĆŖncias
-
CriaĆ§Ć£o do Servidor
- DotEnv - 'leitor de arquivos' que contĆ©m informaƧƵes sensĆveis.
-
CriaĆ§Ć£o da Api (Controllers)
-
Encapsulamento da seguranƧa e middlewares na interface da API (Controllers)
-
Rotas
- GET '/vacancy'
- POST '/vacancy'
- PUT '/vacancy'
- DELETE '/vacancy'
-
-
Model Layer
-
Service Layer
- Interface de ServiƧo GenƩrica
- Isolamento da camada Service
-
Middlewares
- criaĆ§Ć£o de middlewares com shelf
createMiddleware()
- criaĆ§Ć£o de middlewares customizados
- criaĆ§Ć£o de middlewares com shelf
-
Mime Type :
application/json
Middleware get middleware => createMiddleware( responseHandler: (Response res) => res.change( headers: {'content-type': 'application/json'}, ), );
-
verifica a existencia do token JWT
Middleware get verifyJwt => createMiddleware( requestHandler: (Request req) { if (req.url.path == 'login') return null; if (req.context['jwt'] == null) { return Response.forbidden('Not Authorized'); } return null; }, );
-
valida Jwt - PermissĆ£o
Middleware get authentication { return (Handler handler) { return (Request req) async { String? authorizationHeader = req.headers['Authorization']; JWT? jwt; if (authorizationHeader != null) { if (authorizationHeader.startsWith('Bearer ')) { String token = authorizationHeader.substring(7); jwt = await validateJWT(token); } } var request = req.change(context: {'jwt': jwt}); return handler(request); }; }; }
-
SeguranƧa
- Interface de SeguranƧa
-
Encapsulamento da seguranƧa na interface da Api (Controller) atravƩs dos middlewares
abstract class SecurityService<E> { Future<String> generateJWT(String userID); Future<E?> validateJWT(String token); Middleware get authentication; Middleware get verifyJwt; }
-
- Interface de SeguranƧa
-
ImplementaĆ§Ć£o do contrato com JWT
-
Injetor de DependĆŖncia
- CriaĆ§Ć£o da classe DependencyInjector Container de injeĆ§Ć£o de DependĆŖncia
- CriaĆ§Ć£o da classe Injects que armazena os registros das instĆ¢ncias
- Banco de Dados MySql
- Docker
- Conectar projeto Dart ao banco de dados
- criaĆ§Ć£o da abstraĆ§Ć£o da conexĆ£o com o banco
- Mapear modelos da consulta
- DAO Pattern - Isolamento as consultas
- CRUD
- API - ponta a ponta
- Hash nas senhas
- IntegraĆ§Ć£o do Login
- CORS
- Deploy
-
Passagem de Dados com Query e Router Parms
- Router param
- obter parĆ¢metro diretamente da url.Exemplo:
http://localhost:8080/<variavel>
- obter parĆ¢metro diretamente da url.Exemplo:
- Query parms
- busca pelo parametro na url atraves da estrutura
String? nome = req.url.queryParameters['nome]
- Passagem por
http://localhost:8080/query?nome=Luan
- busca pelo parametro na url atraves da estrutura
- body param
String body = await req.readAsString()
- Router param
-
Mime Type - inseridos no headers da Response na chave
content-type
- Exemplos
content-type: application/json
content-type: text/html
-
Cascade e PipeLine